/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Bug i forb. med datoer?
Fra : Bo Dudek


Dato : 14-12-03 13:37

Hejsa

Jeg har dette script:

$startdato_temp='2003-10-01';
$slutdato_temp='2003-10-30';
$dato_temp=$startdato_temp;
while ($dato_temp>=$startdato_temp && $dato_temp<=$slutdato_temp){
echo $dato_temp;
echo '<br>';
$dato_temp=date('Y-m-d',(strtotime($dato_temp))+(60*60*24));
}

som udskriver datoer i intervallet fra startdato_temp til
slutdato_temp.. det fungerer egentlig fint nok, hvis man bare ikke
krydser datoen 2003-10-26.. ehm.. for så looper den uendeligt..

er det mon en bug?

Mvh
Bo Dudek
www.bodudek.dk

 
 
Kim Schulz (14-12-2003)
Kommentar
Fra : Kim Schulz


Dato : 14-12-03 14:36

On Sun, 14 Dec 2003 13:37:10 +0100
Bo Dudek <bo@FJERNbodudek.dk> wrote:

> Hejsa
>
> Jeg har dette script:
>
> $startdato_temp='2003-10-01';
> $slutdato_temp='2003-10-30';
> $dato_temp=$startdato_temp;
> while ($dato_temp>=$startdato_temp && $dato_temp<=$slutdato_temp){
> echo $dato_temp;
> echo '<br>';
> $dato_temp=date('Y-m-d',(strtotime($dato_temp))+(60*60*24));
> }
>
> som udskriver datoer i intervallet fra startdato_temp til
> slutdato_temp.. det fungerer egentlig fint nok, hvis man bare ikke
> krydser datoen 2003-10-26.. ehm.. for så looper den uendeligt..
>
> er det mon en bug?

nok nærmere en mangel i din php viden du kan ikke sammenligne 2
strenge med >= og forvente at det går godt.
http://dk.php.net/strcmp er din ven.

Peter Brodersen (14-12-2003)
Kommentar
Fra : Peter Brodersen


Dato : 14-12-03 14:48

On Sun, 14 Dec 2003 14:35:31 +0100, Kim Schulz <kim@schulz.dk> wrote:

>nok nærmere en mangel i din php viden du kan ikke sammenligne 2
>strenge med >= og forvente at det går godt.

I modsætning til perl, så ser jeg ikke at der er samme restriktion,
hvis man fx kigger på:
http://www.php.net/manual/en/language.operators.comparison.php

Med dens brug af "equal" ved >=, tyder alt på, at der ikke foretages
et typecheck, så ved simpel dato-sammenligning, der i forvejen er
placeret i det korrekte format, så burde der ikke være et problem her.

if ("2002-01-01" >= "2001-12-30") ..

vil fx uden problemer være et sandt udtryk.

Problemet skyldes dog noget andet - jeg svarer i et selvstændigt
indlæg.

--
- Peter Brodersen

Ugens sprogtip: jamen (og ikke jammen)

Peter Brodersen (14-12-2003)
Kommentar
Fra : Peter Brodersen


Dato : 14-12-03 14:50

On Sun, 14 Dec 2003 13:37:10 +0100, Bo Dudek <bo@FJERNbodudek.dk>
wrote:

>som udskriver datoer i intervallet fra startdato_temp til
>slutdato_temp.. det fungerer egentlig fint nok, hvis man bare ikke
>krydser datoen 2003-10-26.. ehm.. for så looper den uendeligt..
>
>er det mon en bug?

Her går vi over til sommertid, så "2003-10-26 00:00:00" plus 24 timer
er lig med "2003-10-26 23:00:00" (og ikke "2003-10-27 00:00:00").

Men du nøjes kun med at tage Y-m-d, så du bliver ved med at blive ved
"2003-10-26" (og implicit "00:00:00").

--
- Peter Brodersen

Ugens sprogtip: jamen (og ikke jammen)

Bo Dudek (14-12-2003)
Kommentar
Fra : Bo Dudek


Dato : 14-12-03 15:24

[...]

>Her går vi over til sommertid, så "2003-10-26 00:00:00" plus 24 timer
>er lig med "2003-10-26 23:00:00" (og ikke "2003-10-27 00:00:00").
>
>Men du nøjes kun med at tage Y-m-d, så du bliver ved med at blive ved
>"2003-10-26" (og implicit "00:00:00").

ooooh.. sommertid og vintertid kan drille lige så meget i hverdagen
som i php.. anyway, så løste jeg problemet ved at konvertere med
strtotime og derefter sammenligne..

Mvh
Bo Dudek
www.bodudek.dk

Kim Schulz (14-12-2003)
Kommentar
Fra : Kim Schulz


Dato : 14-12-03 15:01

On Sun, 14 Dec 2003 14:48:18 +0100
Peter Brodersen <usenet@ter.dk> wrote:

> On Sun, 14 Dec 2003 14:35:31 +0100, Kim Schulz <kim@schulz.dk> wrote:
>
> >nok nærmere en mangel i din php viden du kan ikke sammenligne 2
> >strenge med >= og forvente at det går godt.
>
> I modsætning til perl, så ser jeg ikke at der er samme restriktion,
> hvis man fx kigger på:
> http://www.php.net/manual/en/language.operators.comparison.php
>
> Med dens brug af "equal" ved >=, tyder alt på, at der ikke foretages
> et typecheck, så ved simpel dato-sammenligning, der i forvejen er
> placeret i det korrekte format, så burde der ikke være et problem her.
>
> if ("2002-01-01" >= "2001-12-30") ..
>
> vil fx uden problemer være et sandt udtryk.

ja men hvad med "234" >= 234 ? osv. når du ikke implicit caster dine
strenge, så kan de godt antage andet end "Streng" format i php - derfor
bl.a. strcmp er der.


> Problemet skyldes dog noget andet - jeg svarer i et selvstændigt
> indlæg.

yep

Peter Brodersen (14-12-2003)
Kommentar
Fra : Peter Brodersen


Dato : 14-12-03 15:03

On Sun, 14 Dec 2003 15:00:54 +0100, Kim Schulz <kim@schulz.dk> wrote:

>ja men hvad med "234" >= 234 ?

Det evaluerer selvfølgelig også sandt. Men ("012" == 12) og
(12 == "012") er nok bedre eksempler på din pointe :)

>osv. når du ikke implicit caster dine
>strenge, så kan de godt antage andet end "Streng" format i php - derfor
>bl.a. strcmp er der.

Så må man jo bruge strcmp(), når det er relevant ;) Det vil jeg hævde,
at det ikke er i Bos tilfælde.

--
- Peter Brodersen

Ugens sprogtip: jamen (og ikke jammen)

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408946
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste