2009-04-20 9 views
2

J'utilise strtotime pour créer un horodatage à partir de XML ropey, mais le fuseau horaire est incorrect.supprimer 5 heures de l'heure

Comment puis-je retirer 5 heures de l'heure?

Répondre

9

Si vous connaissez le fuseau horaire, vous pouvez définir avec date_default_timezone_set()

Quand cela est défini, vous pouvez simplement le faire dans strtotime() comme vous le savez.

strtotime("-5 hours", $time); 
+0

rapide tapez ... me battre à elle de 23 sec :)) –

3

Vous voulez probablement quelque chose comme:

date('Y-m-d H:i:s', time() - 18000); 

Formate une chaîne comme une date et l'heure, pour l'heure en secondes depuis l'époque - secondes (cinq 18000 heures). Vous pouvez ajuster le nombre que vous soustrayez pour ajuster le nombre d'heures d'ajustement. Il pourrait être plus clair si vous écrivez le 18000 comme (60 * 60 * 5). Strtotime() peut avoir des conséquences inattendues avec les chaînes où l'ordre est différent de celui des États-Unis. La notation européenne (01/02/2009) serait lue le 2 janvier où elle devrait être le 1er février. C'est le seul problème que je peux voir avec la solution d'olafur, à part le fait qu'il est solide, mais celui-ci ou celui-là fonctionnera.

+0

Je suis nit picking mais 18000 est un "nombre magique", donc vous voulez ajouter $ five_hours = 5 * 60 * 60; alors mettez ça dans votre code. – TravisO

+2

J'ai mentionné spécifiquement qu'il serait plus clair de l'écrire comme (60 * 60 * 5) au lieu de 18 000. Avez-vous lu la réponse que j'ai donnée au-delà de l'exemple de code? –

+0

Cette méthode est plus fiable que la strtotime. Dans le cas où vous supprimez simplement les heures, les minutes seront réinitialisées à 0 dans certains cas ... – Erick