PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.php > Strange date increment problem
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Strange date increment problem

Réponse
 
LinkBack Outils de la discussion
Vieux 08/11/2007, 19h06   #1
Reg143
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Strange date increment problem

Hi all,

The code below loops from a starting date, incrementing the date and
displaying date and day-of-week. Everything is fine until 2007-11-04 is
reached. Any would be appreciated.

Thanks in advance.

----------------------------------------------------
Dates.php
----------------------------------------------------

<?php

// ----------------------------------
// This code works until the date hits 2007-11-04, it
// never gets past 11/4. Run it starting with the
// different dates below. What gives?
// ------------------------------------

$date[0] = "2007-11-01";
//$date[0] = "2007-11-05";
//$date[0] = "2007-12-31";

$day[0] = DayOfWeek($date[0]);

for ($intX=1;$intX < 7;$intX++) {
$date[$intX] = DateAdd('d', $date[$intX - 1], 1);
$day[$intX] = DayOfWeek($date[$intX]);
}

for ($intX=0;$intX < 7;$intX++) {
echo $day[$intX].' '.$date[$intX].'<br />';
}

// ------------------------------------------------------
function DayOfWeek($strDate) {
$timestamp = mktime(0,0,0,substr($strDate,5,2),substr
($strDate,8,2),substr($strDate,0,4));
$Dateinfo = getdate($timestamp);
switch ($Dateinfo['wday']) {
case 0:
$ret = "Sunday";
break;
case 1:
$ret = "Monday";
break;
case 2:
$ret = "Tuesday";
break;
case 3:
$ret = "Wednesday";
break;
case 4:
$ret = "Thursday";
break;
case 5:
$ret = "Friday";
break;
case 6:
$ret = "Saturday";
break;
}
return $ret;
}

// ------------------------------------------------------
function DateAdd($interval, $strDate, $intNum) {
// $strDate is in 'YYYY-MM-DD' format.
// Convert to timestamp,
// calculate new timestamp,
// convert back to "YYYY-MM-DD"

$date1 = mktime(0,0,0,substr($strDate,5,2),substr
($strDate,8,2),substr($strDate,0,4));

switch ($interval) {
case 'w':
$date1 = $date1 + ($intNum * 604800);
break;
case 'd':
$date1 = $date1 + ($intNum * 86400);
break;
case 'h':
$date1 =$date1 + ($intNum * 3600);
break;
case 'n':
$date1 = $date1 + ($intNum * 60);
break;
case 's':
$date1 = $intNum;
break;
}
$ret = date("Y-m-d",$date1);
return $ret;

}
?>

  Réponse avec citation
Vieux 08/11/2007, 19h21   #2
ZeldorBlat
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Strange date increment problem

On Nov 8, 2:06 pm, Reg143 <Reg...@aol.com> wrote:
> Hi all,
>
> The code below loops from a starting date, incrementing the date and
> displaying date and day-of-week. Everything is fine until 2007-11-04 is
> reached. Any would be appreciated.
>
> Thanks in advance.
>
> ----------------------------------------------------
> Dates.php
> ----------------------------------------------------
>
> <?php
>
> // ----------------------------------
> // This code works until the date hits 2007-11-04, it
> // never gets past 11/4. Run it starting with the
> // different dates below. What gives?
> // ------------------------------------
>
> $date[0] = "2007-11-01";
> //$date[0] = "2007-11-05";
> //$date[0] = "2007-12-31";
>
> $day[0] = DayOfWeek($date[0]);
>
> for ($intX=1;$intX < 7;$intX++) {
> $date[$intX] = DateAdd('d', $date[$intX - 1], 1);
> $day[$intX] = DayOfWeek($date[$intX]);
>
> }
>
> for ($intX=0;$intX < 7;$intX++) {
> echo $day[$intX].' '.$date[$intX].'<br />';
>
> }
>
> // ------------------------------------------------------
> function DayOfWeek($strDate) {
> $timestamp = mktime(0,0,0,substr($strDate,5,2),substr
> ($strDate,8,2),substr($strDate,0,4));
> $Dateinfo = getdate($timestamp);
> switch ($Dateinfo['wday']) {
> case 0:
> $ret = "Sunday";
> break;
> case 1:
> $ret = "Monday";
> break;
> case 2:
> $ret = "Tuesday";
> break;
> case 3:
> $ret = "Wednesday";
> break;
> case 4:
> $ret = "Thursday";
> break;
> case 5:
> $ret = "Friday";
> break;
> case 6:
> $ret = "Saturday";
> break;
> }
> return $ret;
>
> }
>
> // ------------------------------------------------------
> function DateAdd($interval, $strDate, $intNum) {
> // $strDate is in 'YYYY-MM-DD' format.
> // Convert to timestamp,
> // calculate new timestamp,
> // convert back to "YYYY-MM-DD"
>
> $date1 = mktime(0,0,0,substr($strDate,5,2),substr
> ($strDate,8,2),substr($strDate,0,4));
>
> switch ($interval) {
> case 'w':
> $date1 = $date1 + ($intNum * 604800);
> break;
> case 'd':
> $date1 = $date1 + ($intNum * 86400);
> break;
> case 'h':
> $date1 =$date1 + ($intNum * 3600);
> break;
> case 'n':
> $date1 = $date1 + ($intNum * 60);
> break;
> case 's':
> $date1 = $intNum;
> break;
> }
> $ret = date("Y-m-d",$date1);
> return $ret;
>
> }
>
> ?>


Maybe because of DST? I don't really want to try and figure out
exactly why this code doesn't work, so instead let me suggest
something a bit simpler that does what you're trying to do:

$startDate = strtotime('2007-11-01');
$endDate = strtotime('+7 days', $startDate);

for($i = $startDate; $i < $endDate; $i = strtotime('+1 day', $i))
echo date('l Y-m-d', $i) . '<br/>';

  Réponse avec citation
Vieux 08/11/2007, 20h43   #3
Jerry Stuckle
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Strange date increment problem

Reg143 wrote:
> Hi all,
>
> The code below loops from a starting date, incrementing the date and
> displaying date and day-of-week. Everything is fine until 2007-11-04 is
> reached. Any would be appreciated.
>
> Thanks in advance.
>
> ----------------------------------------------------
> Dates.php
> ----------------------------------------------------
>
> <?php
>
> // ----------------------------------
> // This code works until the date hits 2007-11-04, it
> // never gets past 11/4. Run it starting with the
> // different dates below. What gives?
> // ------------------------------------
>
> $date[0] = "2007-11-01";
> //$date[0] = "2007-11-05";
> //$date[0] = "2007-12-31";
>
> $day[0] = DayOfWeek($date[0]);
>
> for ($intX=1;$intX < 7;$intX++) {
> $date[$intX] = DateAdd('d', $date[$intX - 1], 1);
> $day[$intX] = DayOfWeek($date[$intX]);
> }
>
> for ($intX=0;$intX < 7;$intX++) {
> echo $day[$intX].' '.$date[$intX].'<br />';
> }
>
> // ------------------------------------------------------
> function DayOfWeek($strDate) {
> $timestamp = mktime(0,0,0,substr($strDate,5,2),substr
> ($strDate,8,2),substr($strDate,0,4));
> $Dateinfo = getdate($timestamp);
> switch ($Dateinfo['wday']) {
> case 0:
> $ret = "Sunday";
> break;
> case 1:
> $ret = "Monday";
> break;
> case 2:
> $ret = "Tuesday";
> break;
> case 3:
> $ret = "Wednesday";
> break;
> case 4:
> $ret = "Thursday";
> break;
> case 5:
> $ret = "Friday";
> break;
> case 6:
> $ret = "Saturday";
> break;
> }
> return $ret;
> }
>
> // ------------------------------------------------------
> function DateAdd($interval, $strDate, $intNum) {
> // $strDate is in 'YYYY-MM-DD' format.
> // Convert to timestamp,
> // calculate new timestamp,
> // convert back to "YYYY-MM-DD"
>
> $date1 = mktime(0,0,0,substr($strDate,5,2),substr
> ($strDate,8,2),substr($strDate,0,4));
>
> switch ($interval) {
> case 'w':
> $date1 = $date1 + ($intNum * 604800);
> break;
> case 'd':
> $date1 = $date1 + ($intNum * 86400);
> break;
> case 'h':
> $date1 =$date1 + ($intNum * 3600);
> break;
> case 'n':
> $date1 = $date1 + ($intNum * 60);
> break;
> case 's':
> $date1 = $intNum;
> break;
> }
> $ret = date("Y-m-d",$date1);
> return $ret;
>
> }
> ?>
>
>


Why go to all the trouble with your functions when PHP has them for you?

This does the same thing, using the built-in functions:

$date[0] = "2007-11-01";
$day[0] = date('l', strtotime($date[0]));

// $date[0] = ('11-01-2007 + 1 day');

for ($intX=1;$intX < 7;$intX++) {
$tmp = strtotime($date[$intX - 1] . ' + 1 day');
$date[$intX] = date('Y-m-d', $tmp);
$day[$intX] = date('l', $tmp);
}

for ($intX=0;$intX < 7;$intX++) {
echo $day[$intX].' '.$date[$intX].'<br />';
}

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

  Réponse avec citation
Vieux 08/11/2007, 21h00   #4
Rik Wasmus
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Strange date increment problem

On Thu, 08 Nov 2007 20:06:08 +0100, Reg143 <Reg143@aol.com> wrote:

> Hi all,
>
> The code below loops from a starting date, incrementing the date and
> displaying date and day-of-week. Everything is fine until 2007-11-04 is
> reached. Any would be appreciated.


I've tested the unaltered script (well, I disabled error reporting to
check because there's no timezone set): works OK here. If it doesn't for
you, var_dump() your variables and see what happens.


Then again, this does the trick:
<?php
date_default_timezone_set('EST');
$date = array();
$date[] = strtotime('2007-11-01');
for ($intX=0;$intX < 7;$intX++) {
echo date('Y-m-d',$date[$intX]).' '.date('l',$date[$intX])."<br>\n";
$date[$intX+1] = strtotime('+ 1 day', $date[$intX]);
}
?>
--
Rik Wasmus
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 19h06.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,21314 seconds with 12 queries