Avatar billede danic Nybegynder
19. januar 2010 - 09:33 Der er 11 kommentarer og
1 løsning

Hjælp til dato-lykke?

Er der en som kan hjælpe med at få denne dato funktion til at køre i lykke på de 4 begivenheder her?

<?php
/**
* This php snippet displays (x) days left to a specific event
*
* Change the values for keyMonth, keyDay and keyYear to suit
*/


//Valentin
$keyMonth = 2;
$keyDay = 14;
$keyYear = 2010;

//Mors dag
$keyMonth = 5;
$keyDay = 9;
$keyYear = 2010;

//Fars dag
$keyMonth = 6;
$keyDay = 5;
$keyYear = 2010;

//Juleaften
$keyMonth = 12;
$keyDay = 24;
$keyYear = 2010;

$month = date(F);
$mon = date(n);
$day = date(j);
$year = date(Y);
$hours_left = (mktime(0,0,0,$keyMonth,$keyDay,$keyYear) - time())/3600;
$daysLeft = ceil($hours_left/24);
$z = (string)$daysLeft;
if ($z > 1) {
print " og der er  <font size=\"4\" color=\"red\">";
print $z;
print "</font> dage til valentin</p>";
}
?>
Avatar billede repox Seniormester
19. januar 2010 - 09:56 #1
Jeg forstår ikke hvad det er du gerne vil have lavet?
Avatar billede danic Nybegynder
19. januar 2010 - 10:01 #2
Først nedtælling til Valentin når den udløber, så nedtælling til Mors dag, og når den udløber så nedtælling til Fars dag osv.
Avatar billede repox Seniormester
19. januar 2010 - 10:44 #3
Mja, men så kan du ikke bruge ovenstående script til ret meget, for du overskriver jo blot dine værdier for hver mærkedag du har.

Et eksempel på en bedre løsning ville være noget ala:


<?php

    $specialDay[0]["name"] = "Valentinsdag";
    $specialDay[0]["date"] = "2010-02-14";

    $specialDay[1]["name"] = "Mors dag";
    $specialDay[1]["date"] = "2010-05-09";

    $specialDay[2]["name"] = "Fars dag";
    $specialDay[2]["date"] = "2010-06-05";

    $specialDay[3]["name"] = "Juleaften";
    $specialDay[3]["date"] = "2010-12-24";


    foreach($specialDay as $day)
    {
        $date = strtotime($day["date"]);
        if( $date < time() )
            continue;

        $daysBetween = round( (($date-time()) / 60 / 60 / 24), 0);
        echo "Der er ".$daysBetween." dage til ".$day["name"];
        break;

    }

?>



Men det er bare et forslag...
Avatar billede danic Nybegynder
19. januar 2010 - 11:07 #4
Smukt!

Er er muligt at udvide scriptet med en start og slut dato, så f.eks. juleaften bliver til:

$specialDay[3]["name"]  = "Juleaften";
$specialDay[3]["date"]  = "2010-12-24";
$specialDay[3]["start"] = "2010-11-01";
$specialDay[3]["end"]  = "2010-12-24";

Scriptet vil herefter kun echo output i de valgte start/slut perioder.
Avatar billede repox Seniormester
19. januar 2010 - 12:49 #5
Ja, det kan du da - har du ikke mulighed for at selv prøve ud fra eksemplet jeg har givet?
Avatar billede danic Nybegynder
19. januar 2010 - 13:26 #6
Er det noget med (date bliver til end)

$start = strtotime($day["start"]);
$end = strtotime($day["end"]);

if( $start < time() && end > time() )

?
Avatar billede repox Seniormester
19. januar 2010 - 13:34 #7
Ja, det er bestemt et godt bud; har du prøvet det?
Avatar billede danic Nybegynder
20. januar 2010 - 14:08 #8
Kan ikke rigtigt få den til at spille, start slår ikke igennem:

<?php

    $specialDay[0]["name"] = "Valentinsdag";
    $specialDay[0]["start"] = "2010-02-04";
    $specialDay[0]["end"] = "2010-02-14";

    $specialDay[1]["name"] = "Mors dag";
    $specialDay[0]["start"] = "2010-04-09";   
    $specialDay[1]["end"] = "2010-05-09";

    $specialDay[2]["name"] = "Fars dag";
    $specialDay[0]["start"] = "2010-05-05";   
    $specialDay[2]["end"] = "2010-06-05";

    $specialDay[3]["name"] = "Juleaften";
    $specialDay[0]["start"] = "2010-11-01";   
    $specialDay[3]["end"] = "2010-12-24";
   


    foreach($specialDay as $day)
    {
        $start = strtotime($day["start"]);
        $end = strtotime($day["end"]);

        if( $end < time() && $start > time() )
            continue;

        $daysBetween = round( (($end-time()) / 60 / 60 / 24), 0);
        echo "Der er ".$daysBetween." dage til ".$day["name"];
        break;

    }

?>
Avatar billede repox Seniormester
20. januar 2010 - 14:26 #9
Det er fordi du ikke har styr på dine array nøgler i $specialDays arrayet. din start dato eksisterer kun i $specialDays[0] som du så overskriver for hver mærkedag.

Udover det, så kniber det med logikken i din if statement. Du bør bruge || og ikke &&.

Og så havde du glemt at omdøbe en variabel.


<?php

  $specialDay[0]["name"] = "Valentinsdag";
  $specialDay[0]["start"] = "2010-02-04";
  $specialDay[0]["end"] = "2010-02-14";

  $specialDay[1]["name"] = "Mors dag";
  $specialDay[1]["start"] = "2010-04-09";
  $specialDay[1]["end"] = "2010-05-09";

  $specialDay[2]["name"] = "Fars dag";
  $specialDay[2]["start"] = "2010-05-05";
  $specialDay[2]["end"] = "2010-06-05";

  $specialDay[3]["name"] = "Juleaften";
  $specialDay[3]["start"] = "2010-11-01";
  $specialDay[3]["end"] = "2010-12-24";




    foreach($specialDay as $day)
    {
        $start = strtotime($day["start"]);
        $end = strtotime($day["end"]);

        if( $start > time() || $end < time() )
            continue;

        $daysBetween = round( (($end-time()) / 60 / 60 / 24), 0);
        echo "Der er ".$daysBetween." dage til ".$day["name"];
        break;

    }


?>

Avatar billede danic Nybegynder
20. januar 2010 - 15:30 #10
Takker! - husk et svar :-)
Avatar billede danic Nybegynder
20. januar 2010 - 15:31 #11
Takker, husk dit svar :-)
Avatar billede repox Seniormester
20. januar 2010 - 15:40 #12
Det fik du her
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

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