2010-10-07 16 views
1

Bon j'ai donc ce code qui fait une liste de dates:php - ajustement pour tenir compte des fuseaux horaires

$dates = array(); 
       for($i = 1; $i < 10; $i++) 
       { 
        $datetime = mktime(12, 0, 0, date('n'), date('j') + $i, date('Y')); 
        if(date('N', $datetime) != 6 && date('N', $datetime) != 7) 
        { 
         $dates[date('l, F jS', $datetime)] = date('l, F jS', $datetime); 
        } 
       } 

Les dates sont demain et aussi longtemps qu'ils ne sont pas samedi ou le dimanche.

Maintenant le problème est "demain" est changé à 20h00 EST.

Pour expliquer, disons que c'est mercredi. La première option dans la liste devrait être jeudi. Cependant, une fois qu'il est 20h00 EST, la première option est vendredi. Au lieu de changer à 20h00 EST je voudrais qu'il change à 03h00 EST (donc jeudi à 02h00 il devrait toujours offrir jeudi comme un choix)

Répondre

0

Je pense que vous obtenez votre fuseaux horaires confus actuellement. 20h00 EDT = Midnight UTC.

Quoi qu'il en soit, en PHP 5.3:

$one_day = new DateInterval('P1D'); 
$tz = new DateTimeZone('America/New_York'); 
$start = new DateTime('now', $tz); 

if ($start->format('G') >= 3) 
    $start->add($one_day); 

foreach (new DatePeriod($start, $one_day, 10) as $date) 
{ 
    if ($date->format('N') < 6) 
    echo $date->format('l, F jS')."\n"; 
} 

La logique reste la même si vous êtes sur < 5.3, suffit de faire des choses avec les autres fonctions comme strtotime(), date(), etc:

$one_day = 86400; 
date_default_timezone_set('America/New_York'); 
$start = time(); 

if (date('G', $start) >= 3) 
    $start += $one_day; 

for ($i = 0, $date = $start; $i < 10; ++$i, $date += $one_day) 
{ 
    if (date('N', $date) < 6) 
    echo date('l, F jS', $date)."\n"; 
} 

Je pense que cela devrait fonctionner.