2010-12-01 40 views
50

Comment créer un DateTime à partir de l'horodatage dans les versions inférieures à < 5.3?Création de DateTime à partir de l'horodatage dans PHP <5.3

En 5.3, il serait:

$date = DateTime::createFromFormat('U', $timeStamp); 

Le constructeur DateTime veut une chaîne, mais cela ne fonctionne pas pour moi

$date = new DateTime("@$timeStamp"); 
+1

Selon le manuel, qui devrait fonctionner. Avez-vous essayé '$ date = new DateTime ('@'. $ TimeStamp);'? Et par "n'a pas fonctionné", que voulez-vous dire? – Jonah

+1

Définir * n'a pas fonctionné pour moi *. Les erreurs? Mauvaise date/heure? –

+0

Erreur irrécupérable: Exception non interceptée 'Exception' avec message 'DateTime :: __ construct() [datetime.--construct]: Échec de l'analyse de la chaîne de temps (@) à la position 0 (@): Caractère inattendu' – Yarin

Répondre

3

Les travaux suivants:

$dateString = date('Ymd', $timeStamp); 
$date = new DateTime($dateString); 
+0

cela ne fonctionne pas :(comment y remédier – user3501407

+0

Timestamp [1] n'est pas seulement Ymd, c'est le nombre de secondes (micro secondes dans certains cas) depuis le 1er janvier 1970 UTC [1] = https: // fr. wikipedia.org/wiki/Unix_time –

+0

Peut être '$ dateString = date ('U', $ timeStamp);' alors?! – Pete

31

En supposant que vous voulez la date et l'heure et pas seulement la date comme dans la réponse précédente:

$dtStr = date("c", $timeStamp); 
$date = new DateTime($dtStr); 

Cela semble plutôt idiot d'avoir à faire cela.

+0

Cette solution fonctionne, mais passe inutilement du temps à mettre en forme la chaîne de date, puis à ré-analyser – Jonah

11

Cela ne fonctionne pas car votre variable $ timeStamp est vide. Essayez de faire écho à la valeur de $ timeStamp juste avant de créer le DateTime et vous verrez. Si vous exécutez ceci:

new DateTime('@2345234'); 

Vous n'obtenez pas d'erreur. Toutefois, si vous exécutez:

new DateTime('@'); 

Il génère l'erreur exacte que vous avez indiquée. Vous devrez faire un peu de débogage et découvrir pourquoi $ timeStamp est vide.

+0

Soyez averti , que l'utilisation de '@' dans le constructeur ignorera le fuseau horaire actuel de l'environnement et le fuseau horaire lorsqu'il est fourni dans le deuxième argument, même en utilisant '$ dateTime-> modify ('@'. 1234)' use 'setTimezone (date_default_timezone_get()) 'pour passer du fuseau horaire UTC au fuseau horaire de l'environnement – fyrye

+0

J'ai eu le même problème lorsque j'ai utilisé '@' avec un horodatage vide, merci pour cette réponse Le message d'erreur que PHP a donné était: l Bien que utile, cela impliquait que le '@' était le problème. – thomasrutter

38

PHP 5> = 5.2.0

$date = new DateTime(); 
$date->setTimestamp($timeStamp); 
+5

Pensez que c'est PHP 5> = 5.3 – Spencer

+1

Incorrect http://php.net/manual/fr/datetime.settimestamp.php – DIMMSum

+0

Cette réponse est incorect, setTimestamp() ajouté dans php 5.3 – Arkemlar