L'ajout de jours pour un timestamp
De donner une date de départ, je suis en ajoutant quatre fois sept jours pour obtenir 5 dates différentes, séparées exactement une semaine chacun.
//$date = '28-10-2010';
$timestamp = mktime( 0, 0, 0, 10, 01, 2010 );
echo "Date=".date( 'd-m-Y', $timestamp )."<br>";
$timestamp += (60*60*24*7);
echo "Date=".date( 'd-m-Y', $timestamp )."<br>";
$timestamp += (60*60*24*7);
echo "Date=".date( 'd-m-Y', $timestamp )."<br>";
$timestamp += (60*60*24*7);
echo "Date=".date( 'd-m-Y', $timestamp )."<br>";
$timestamp += (60*60*24*7);
echo "Date=".date( 'd-m-Y', $timestamp )."<br>";
Le code renvoie ceci:
Date=01-10-2010 Friday
Date=08-10-2010 Friday
Date=15-10-2010 Friday
Date=22-10-2010 Friday
Date=29-10-2010 Friday
Qui aussi longtemps que je sais que c'est correct.
Mais, voyez ce qui se passe lorsque vous allez à travers le 2010-10-31 et 2010-11-01
$timestamp = mktime( 0, 0, 0, 10, 28, 2010 );
[...]
Curieusement, il renvoie à ceci:
Date=28-10-2010 Thursday
Date=03-11-2010 Wednesday
Date=10-11-2010 Wednesday
Date=17-11-2010 Wednesday
Date=24-11-2010 Wednesday
Ce qui se passe? Deuxième date doit être 04-11-2010!
Aussi, j'ai vu que cet "échec" arrive tous les dix ans!
Est-ce quelque chose en rapport avec l'heure d'été? Si oui, comment puis-je le résoudre?
Est-il quelque chose que je suis dominant?
Edit: Ok, je outputed le temps, juste pour voir ce qui se passe et c'est ce que j'ai maintenant:
Date=28-10-2010 Thursday :: 00:00:00
Date=03-11-2010 Wednesday :: 23:00:00
Date=10-11-2010 Wednesday :: 23:00:00
Date=17-11-2010 Wednesday :: 23:00:00
Date=24-11-2010 Wednesday :: 23:00:00
Semble quelque chose en rapport avec le temps, il se passe quelque chose à 2010-11-31...
OriginalL'auteur Raúl Ferràs | 2010-08-03
Vous devez vous connecter pour publier un commentaire.
Jamais utiliser les mathématiques comme 60*60*24*7 pour ajouter/soustraire jours (à cause de l'heure avancée de l'économie), l'utilisation
strtotime
oumktime
à la place:Votre exemple sera plus évident si vous aurez le temps de sortie:
De sortie:
Ici vous avez
2010-11-03 23:00:00
au lieu de2010-11-04 00:00:00
parce que l'un des jours (31 Oct) est 25 heures au lieu de 24.OriginalL'auteur Alexander Konstantinov
On dirait que vous vous êtes déplacé à l'heure d'été de l'épargne ou à l'arrière d'eux.
POSIX temps (timestamp) est toujours à l'UTC, alors que l'heure locale est UTC+X X risque de changement de date à date en fonction des économies de temps.
OriginalL'auteur Artyom
Il semble vraiment être fuseau horaire/heure d'été liées.
Ajoutant
la première ligne résout le problème (que vous n'utilisez plus tous les paramètres de l'heure d'été).
OriginalL'auteur Mario
Je crois que cela a quelque chose à voir avec l'heure d'été parce que le "temps" de votre segment de timestamp est défini à minuit sur le point, mais quand l'heure d'été se termine nous revenir d'une heure - ce qui est encore le jour d'avant (à 11h).
Si vous ajoutez 2 heures à la ligne d'origine de sorte que vous avez ceci:
et donc commencer à 2h du matin plutôt qu'à minuit... il fonctionne.
OriginalL'auteur Evernoob
Je ne comprendrai jamais pourquoi les gens utilisent cette horrible
mktime
fonction.Dans le cas où vous êtes sur PHP5.3 pourtant, vous pourriez envisager d'utiliser
Sans PHP5.3 vous pouvez toujours utiliser
DateTime questions sont assez commun, de sorte que vous pourriez trouver intéressant cas lors de la recherche.
OriginalL'auteur Gordon
Au cas où quelqu'un a besoin, tout comme moi de référencement sur le site: aujourd'Hui, à l'heure actuelle, Y-m-d H:i:s, plus +7 Jours. OU vous pouvez ajouter +de 3 Mois, etc.
OriginalL'auteur Sol
J'ai eu beaucoup de succès avec cette méthode pour ajouter des jours, si je n'ai pas testé avec votre format:
OriginalL'auteur DBQ