Avatar billede fhansen Praktikant
05. februar 2007 - 00:42 Der er 12 kommentarer og
1 løsning

while mellem 2 datoer

Hejsa.

Jeg er kørt sur Date functionerne i PHP

Jeg har brug for en løkke mellem 2 datoer, men kan ikke få det til at fungere, synes at snart har prøvet alt.
skal måske lige fortælle at Fromdate og Todate har formatet mm-dd-yyyy, det format kommer fra en kalender jeg har fundet på nettet.


Hilsen

Finn

if(isset($_POST["CreateDb"])) {
  if(isset($_POST["Fromdate"]) && ($_POST["Todate"])){
   
   
    $FDate = strtotime($_POST["Fromdate"]);
    $TDate = strtotime($_POST["Todate"]);
   
    while($FDate <= $Tdate){
    /* Mysql stuff */
    echo"Checker lige";
    $FDate++;
    }
}else{
exit;
}
Avatar billede coderdk Praktikant
05. februar 2007 - 01:38 #1
Prøv:

    $FDate = explode("-",$_POST["Fromdate"]);
    $TDate = explode("-",$_POST["Todate"]);
    $FDate = strtotime( $FDate[2]."-".$FDate[0]."-".$FDate[1] );
    $TDate = strtotime( $TDate[2]."-".$TDate[0]."-".$TDate[1] );
    while($FDate <= $Tdate){
    /* Mysql stuff */
    echo"Checker lige";
    $FDate = strtotime( "+1 day", $FDate );
    }
Avatar billede fhansen Praktikant
05. februar 2007 - 04:37 #2
Se det er jo noget der virker, er det så den samme fremgangsmåde jeg skal bruge når jeg skal til at lege med tid...  her skal jeg checke for hver 30min.
Og lige en ting mere, når jeg nu skal $Fdate ind i MySql, skal jeg bruge date("Y, n, j",$FDate);
Avatar billede coderdk Praktikant
05. februar 2007 - 13:21 #3
Ja nogenlunde, du kan i stedet for strftime bare lægge tallet til:

1 dag:

$Fdate += ( 60 * 60 * 24 );

Og med tid (30 min):

$tid += ( 60 * 30 );

MySQL's eget format er ISO-formatet "Y-m-d" så brug hellere den :)
Avatar billede fhansen Praktikant
05. februar 2007 - 19:35 #4
Takker for hjælpen
Avatar billede fhansen Praktikant
05. februar 2007 - 20:32 #5
Damn din løsning virker ikke helt alligevel, nemlig denne del
$FDate = strtotime( "+1 day", $FDate );
Avatar billede coderdk Praktikant
05. februar 2007 - 20:43 #6
Jo det gør da, se selv en demonstration:

    $FDate = strtotime( "2007-2-5" );
    echo "2007-2-5 i normalt dansk format: " . date( "d/m-Y", $FDate ) . "<br>";
    $FDate = strtotime( "+1 day", $FDate );
    echo "Dagen efter i dansk format: " . date( "d/m-Y", $FDate );

Hos mig outputtes:

2007-2-5 i normalt dansk format: 05/02-2007
Dagen efter i dansk format: 06/02-2007
Avatar billede fhansen Praktikant
05. februar 2007 - 21:12 #7
Ja men while functionen kører ikke
Avatar billede coderdk Praktikant
05. februar 2007 - 22:09 #8
Der må være noget andet galt. Prøv:

    $FDate = explode("-",$_POST["Fromdate"]);
    $TDate = explode("-",$_POST["Todate"]);
    $FDate = strtotime( $FDate[2]."-".$FDate[0]."-".$FDate[1] );
    $TDate = strtotime( $TDate[2]."-".$TDate[0]."-".$TDate[1] );
    echo "Start: " . date("d/m-Y", $FDate) . "<br>";
    echo "Slut: " . date("d/m-Y", $TDate) . "<br>";
    while($FDate <= $Tdate){
    /* Mysql stuff */
    echo"Checker lige";
    $FDate = strtotime( "+1 day", $FDate );
    echo "Nu: " . date("d/m-Y", $FDate) . "<br>";
    }
Avatar billede fhansen Praktikant
05. februar 2007 - 23:06 #9
Se det virker jo stort set, måske jeg ikke har forklaret mig godt nok.
jeg skal bruge et loop der foretager MySql stuff for hver dag imellem FDate og TDate.
Avatar billede fhansen Praktikant
05. februar 2007 - 23:21 #10
Den giver datoen til 01/01-1970 og 02/01-1970
Avatar billede fhansen Praktikant
06. februar 2007 - 00:21 #11
Så spiller for mig dette var løsningen

$FDate = split("[/]",$_POST["Fromdate"]);
    $start_dato = mktime(0, 0, 0, $FDate[0], $FDate[1], $FDate[2]);
    $TDate = split("[/]",$_POST["Todate"]);
    $slut_dato = mktime(0, 0, 0, $TDate[0], $TDate[1], $TDate[2]);

    while($start_dato <= $slut_dato):
   
    echo date("d-m-Y", $start_dato);
    $start_dato = $start_dato+86400;
    endwhile;

Men gad vide om jeg får lige så meget sjov med tiden.
Avatar billede coderdk Praktikant
06. februar 2007 - 00:54 #12
Hmm det lyder som du enten kører en gammel version af PHP eller Windows, eller begge dele ;)
Avatar billede fhansen Praktikant
06. februar 2007 - 02:56 #13
XP og 5.0.
Men jeg vil nu da sige at det stadig er dig der fik på det rette spor.
Jeg har også fået delen de 30 til at køre, det gjorde jeg via array, da det var indenfor 2 forskellige tidsrum på dagen, jeg skulle ligge 30 min. til.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester