2010-04-20 8 views
1
function convertDT($TS) { 
    $TS = strtotime($TS); 
    $TS -= date("Z"); 
    $newTS = date("Y-m-d\TH:i:s\Z", $TS); 
    return $newTS; 
} 

echo "Good: ".convertDT('2010-04-20 01:23:45')."\n"; 
echo "Bad: ".convertDT('2010-31-20 01:23:45')."\n"; 

La deuxième retourne Date: 1969-12-31T23: 00: 00ZPHP - pourquoi cette fonction de date non la moindre erreur

Pourquoi? Cette erreur devrait-elle

Répondre

3

strtotime() renvoie false lorsque vous lui attribuez un horodatage non valide. false est équivalent à 0 si vous l'utilisez dans un contexte entier, donc quand vous passez à cette ligne:

$newTS = date("Y-m-d\TH:i:s\Z", $TS); 

Vous créez effectivement une date à partir d'un horodatage de 0. En ce qui concerne l'époque UNIX, 0 est le 1er janvier 1970, ce qui vous permet d'obtenir votre résultat final.

Votre meilleur pari serait soemthing comme ceci:

$TS = strtotime($TS); 
if($TS === false) { 
    throw new Exception("Invalid timestamp."); 
} 
//etc. 
+0

Merci, c'est ce que je cherchais –

0

Lors de votre deuxième date, vous essayez de créer une date du mois 31 et du jour 20. Même si vous les avez inversées, cela n'aurait aucun sens. Probablement une faute de frappe.

+0

oui, je veux valider et lancer une erreur au lieu de retourner la 1969 Date –

+0

@Phill: 'strtotime' est erroring parce que vous donnez C'est une date bidon. Vous pouvez vérifier pour voir si elle renvoie FALSE en cas d'erreur. Dans la deuxième ligne de votre exemple, vous faites fondamentalement '0 - date ('Z')' à chaque fois, car FALSE est envoyé à 0. – ryeguy

0

lire ce http://php.net/manual/en/function.strtotime.php

Erreurs/Exceptions

Chaque appel à une fonction date/heure génère une E_NOTICE si le fuseau horaire est pas valide, et/ou un E_STRICT ou E_WARNING si vous utilisez les paramètres système ou la variable d'environnement TZ . Voir aussi date_default_timezone_set()

Cette fonction ne génère aucune erreur même si la chaîne d'entrée n'est pas valide.