Question

Je vais avoir un peu de mal avec la fonction mktime. Sur mon serveur de production, si j'exécutez la commande suivante:

echo '<p>' . mktime(24, 0,0, 8,29,2009) . ' - 12pm</p>';
echo '<p>' . mktime(23, 0,0, 8,29,2009) . ' - 11pm</p>';
echo '<p>' . mktime(22, 0,0, 8,29,2009) . ' - 10pm</p>';

Et puis convertir ces horodatages revenir à un format lisible (en utilisant www.unixtimestamp.com pour la conversion rapide), les temps sont décalés d'une heure. Je pensais à l'origine ce fut un problème avec 2400 VS 0000, mais ce ne serait pas en compte les autres dates étant hors tension.

Toutes les idées?

Était-ce utile?

La solution

Votre serveur a un fuseau horaire différent de celui que vous attendez. timestamps Unix sont mesurés en secondes depuis le 1/1/1970 00:00:00 GMT , vous avez une conversion de fuseau horaire caché dans votre code. Vous pouvez soit

Autres conseils

Je viens de rencontrer ce qui suit de la ligne de commande et obtenu les éléments suivants (prévu) sortie. Qu'est-ce qui se passe si vous les exécutez?

$ php -r "echo date('H:i:s Y-m-d', mktime(24, 0, 0, 8, 29, 2009));"
00:00:00 2009-08-30

$ php -r "echo date('H:i:s Y-m-d', mktime(23, 0, 0, 8, 29, 2009));"
23:00:00 2009-08-29

$ php -r "echo date('H:i:s Y-m-d', mktime(22, 0, 0, 8, 29, 2009));"
22:00:00 2009-08-29

Mon problème était que je mktime entrer le jour et le mois avec des zéros à gauche . Que la fonction m'a rendu mauvais résultats. Une option serait de supprimer le zéro avec une fonction comme

$str = ltrim($str, '0');

Source: Comment supprimer tous les zéros à gauche dans une chaîne

ou

$var = (int)$var;

Source: PHP supprimer premiers zéros

je une possibilité de soulmerge:

$date = new DateTime($year . '-' . $month . '-' . $day . ' ' . $hour . ':' . $minute . ':' . $seconds);
$match_time = $date->getTimestamp();

Mais le fuseau horaire doit toujours être réglé (soit avec date_default_timezone_set() ou directement avec DateTime .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top