2011-10-26 5 views
0

Un code simple pour imprimer une datecomportement étrange Date php

$first_date = 1319493600; 
$last_date = 1320184800; 

$testDate = $first_date; 


while ($testDate<=$last_date) 
{ 
    echo strftime("%a", $testDate).' '. strftime("%d", $testDate).' '.strftime("%b", $testDate).'<br>'; 
    $testDate += 86400; 
} 

Oui ce script simple me manque, comme vous voyez ci-dessous

Tue 25 Oct 
Wed 26 Oct 
Thu 27 Oct 
Fri 28 Oct 
Sat 29 Oct 
Sun 30 Oct <----Error 
Sun 30 Oct <----Error 
Mon 31 Oct 
Tue 01 Nov 

quelqu'un a une idée pourquoi?

+2

C'est en effet intéressant. Avez-vous essayé, $ testDate = strtotime ('+ 1 day', $ testDate); ? –

+0

En outre, l'utilisation de date ("D d M", $ testDate) à la place de strftime génère le même texte? –

+0

Ce code fonctionne très bien pour moi, je me demandais ... – Dev

Répondre

3

C'est en fait la raison pour laquelle vous ne devriez jamais incrémenter le jour en ajoutant 24 heures à l'horodatage. Les chances sont que vous êtes dans un fuseau horaire qui observe l'heure d'été et le dernier dimanche d'octobre n'est pas de 24 heures.

Vous pouvez le confirmer en ajoutant echo strftime("%r %x", $testDate); à l'intérieur de la boucle. (Notez également que vous pouvez utiliser plusieurs modificateurs dans strftime() de sorte que vous ne devez pas les concaténer. strftime("%a %d %b", $testDate);)

Toujours utiliser les fonctions de date comme strtotime() ou mktime() pour incrémenter la date.

+1

vous avez raison. $ testDate = strtotime ('+ 1 jour', $ testDate); fonctionne le mieux. – andrew

3

On dirait qu'il est lié à DST .. horloges sont changées au dernier dimanche d'octobre, cette année Sun 30 octobre

Note: vous devez également être dans le fuseau horaire « droit » pour que cela se produise , par exemple ici, c'est:

# date [email protected] 
Mon Oct 24 22:00:00 UTC 2011 

de sorte qu'une heure ne fasse aucune différence, mais pour vous, c'est le cas. Cela peut être assez ennuyeux car les gens ne seront pas en mesure de reproduire votre problème :)

+0

DST problème c'est. Je suis en Grèce - nous changeons notre temps sur le soleil 30, oct. – andrew

2

Ceci est probablement lié à l'heure d'été du 30 octobre. Essayez d'exécuter le script avec les heures imprimées pour voir le changement. Voici un exemple dans mon fuseau horaire:

php > $first_date = 1319493600; 
php > $last_date = 1320184800; 
php > 
php > $testDate = $first_date; 
php > 
php > 
php > while ($testDate<=$last_date) 
php > { 
php {  echo strftime("%a", $testDate).' '. strftime("%d", $testDate).' '.strftime("%b", $testDate). '(' . strftime("%d.%m.%Y %H:%M:%S", $testDate) . ")\n"; 
php {  $testDate += 86400; 
php { } 
Mon 24 Oct(24.10.2011 23:00:00) 
Tue 25 Oct(25.10.2011 23:00:00) 
Wed 26 Oct(26.10.2011 23:00:00) 
Thu 27 Oct(27.10.2011 23:00:00) 
Fri 28 Oct(28.10.2011 23:00:00) 
Sat 29 Oct(29.10.2011 23:00:00) 
Sun 30 Oct(30.10.2011 22:00:00) 
Mon 31 Oct(31.10.2011 22:00:00) 
Tue 01 Nov(01.11.2011 22:00:00) 
0

Sur ma machine, la sortie est:

[email protected]:~# php /tmp/tst.php 
Mon 24 Oct 
Tue 25 Oct 
Wed 26 Oct 
Thu 27 Oct 
Fri 28 Oct 
Sat 29 Oct 
Sun 30 Oct 
Mon 31 Oct 
Tue 01 Nov 
[email protected]:~# php -v 
PHP 5.3.5-1ubuntu7.2 with Suhosin-Patch (cli) (built: May 2 2011 23:18:30) 
Copyright (c) 1997-2009 The PHP Group 
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies 

ce que la version PHP vous utilisez?

En outre, il pourrait avoir quelque chose à voir avec l'heure d'été - essayez d'imprimer les heures trop

+1

XAMPP 1.7.4 [PHP: 5.3.5] Mon erreur comme il semble était le $ testDate + = 86400; partie du code. $ TestDate = strtotime ('+ 1 jour', $ testDate); fonctionne le mieux. – andrew