Avatar billede learner Praktikant
04. april 2011 - 10:31 Der er 14 kommentarer og
1 løsning

date() - er det hverdag? ellers næstkommende hverdag?

Hej jeg søger efter en nem måde at tjekke om en dato er en hverdag i dk eller om det er en helligdag. jeg kan sagtens selv finde ud af at udelukke om det er en lørdag eller søndag. Det er mere de andre danske helligdage som jeg søger efter en funktion til.

Findes der noget?

Det skal bruges til at udregne forventet leveringsdato ud, til min webshop. Og til at beregne hvor mange HVERdage en pakke har været undervejs.

På forhånd tak
Avatar billede siphon Nybegynder
04. april 2011 - 12:47 #1
Hmm.. Det er ikke et problem som du selv siger at tage forbehold for weekend dage. Men det er derimod lidt mere kompliceret med helligedage. Grunden til det er jo at mange af dem ikke falder på samme dato, det du har brug for er at finde en ligning der kan finde frem til de helligdages datoer.

Ved ikke om der findes et script der allerede kan gøre det, men det burde ikke være besværligt at lave, man skal blot finde "reglerne" for de forskellige helligedage og omsætte dem til en form for matematik og bruge det i ens function.
Avatar billede siphon Nybegynder
04. april 2011 - 12:49 #2
Måske dette kan hjælpe dig: http://www.eksperten.dk/guide/107
Avatar billede showsource Seniormester
04. april 2011 - 16:58 #3
Og
http://dk.php.net/manual/en/function.easter-date.php
finder påskedag, hvorfra helligdage kan beregnes, så vidt jeg ved :O)
Avatar billede siphon Nybegynder
05. april 2011 - 12:56 #4
#3 - Vidste slet ikke det var en indbygget funktion til det :). Føler mig lidt torskedum nu ;)
Avatar billede showsource Seniormester
05. april 2011 - 14:20 #5
#4 da jeg startede med php, lavede jeg bl.a. nogle links a'la' ?x=340&y=160 for at definere x/y på en flashfil.
getimagesize() kunne jo ha' gjort det, og der er bare så mange php funktioner man ikke lige kender til.....
Avatar billede siphon Nybegynder
09. april 2011 - 09:49 #6
True true - jo mere man udvikler jo mere kan man udvikle :P ( UHH at starte morgen oven på en god omgang lomme filosofi er bare det bedste :) )
Avatar billede learner Praktikant
13. april 2011 - 10:19 #7
Hej igen

Tak

Jeg synes ikke rigtig det er så let som jeg havde håbet :o)

Men det vil sige at jeg skal lave noget i stil med:

function calc_date_hverdage($from_date=date(), $num_days_to_add){
  $calc_date = $from_date;
  foreach (range(0, ($num_days_to_add-1)) as $p) {
    $calc_date = strtotime(date("", strtotime($calc_date)) . " +1 day");
    while (is_helligdag($calc_date)){
      $calc_date = strtotime(date("", strtotime($calc_date)) . " +1 day");
    }
  }
  return $calc_date
}
Avatar billede learner Praktikant
13. april 2011 - 10:26 #8
og så fundet denne som måske kan rettes til og bruges til is_helligdag()


protected static function getHolidays($year = null)
{
  if ($year === null)
  {
    $year = intval(date('Y'));
  }
 
  $easterDate  = easter_date($year);
  $easterDay  = date('j', $easterDate);
  $easterMonth = date('n', $easterDate);
  $easterYear  = date('Y', $easterDate);

  $holidays = array(
    // These days have a fixed date
    mktime(0, 0, 0, 1,  1,  $year),  // 1er janvier
    mktime(0, 0, 0, 5,  1,  $year),  // Fête du travail
    mktime(0, 0, 0, 5,  8,  $year),  // Victoire des alliés
    mktime(0, 0, 0, 7,  14, $year),  // Fête nationale
    mktime(0, 0, 0, 8,  15, $year),  // Assomption
    mktime(0, 0, 0, 11, 1,  $year),  // Toussaint
    mktime(0, 0, 0, 11, 11, $year),  // Armistice
    mktime(0, 0, 0, 12, 25, $year),  // Noel

    // These days have a date depending on easter
    mktime(0, 0, 0, $easterMonth, $easterDay + 2,  $easterYear),
    mktime(0, 0, 0, $easterMonth, $easterDay + 40, $easterYear),
    mktime(0, 0, 0, $easterMonth, $easterDay + 50, $easterYear),
  );

  sort($holidays);

  return $holidays;
}
Avatar billede learner Praktikant
13. april 2011 - 11:30 #9
Så nu kom jeg lidt nærmere:
mangler kun at fine helligdagene og dem som beregnes ud fra hvornår påsken falder.

function is_helligdag($date_to_check){
   
    // først et simpelt tjek om det er lørdag eller søndag
    if (date('N', strtotime($date_to_check)>5){
        return true;
    }
   
    $day     = intval(date('j', strtotime($date_to_check));
    $month     = intval(date('n', strtotime($date_to_check));
    $year     = intval(date('Y', strtotime($date_to_check));
   
    $easterDate  = easter_date($year);
    $easterDay  = date('j', $easterDate);
    $easterMonth = date('n', $easterDate);
    $easterYear  = date('Y', $easterDate);
   
    $holidays = array(
        // These days have a fixed date
        mktime(0, 0, 0, 1,  1,  $year),  // 1. januar
        mktime(0, 0, 0, 5,  1,  $year),  // 1. maj
        mktime(0, 0, 0, 5,  8,  $year),  //
        mktime(0, 0, 0, 7,  14, $year),  //
        mktime(0, 0, 0, 8,  15, $year),  //
        mktime(0, 0, 0, 11, 1,  $year),  //
        mktime(0, 0, 0, 11, 11, $year),  //
        mktime(0, 0, 0, 12, 24, $year),  // 24. dec Juleaften

        // These days have a date depending on easter
        mktime(0, 0, 0, $easterMonth, $easterDay + 2,  $easterYear), // må være noget med påske
        mktime(0, 0, 0, $easterMonth, $easterDay + 40, $easterYear), // aner ikke hvad dette er
        mktime(0, 0, 0, $easterMonth, $easterDay + 50, $easterYear), // aner ikke hvad dette er
    );
    //sort($holidays);
   
    if ( in_array(mktime(0, 0, 0, $month, $day + 2,  $year), $holidays) ){
        return true;
    } else {
        return false;
    }
}
   
   
   
}

function calc_date_hverdage($from_date=date(), $num_days_to_add){
  $calc_date = $from_date;
  foreach (range(0, ($num_days_to_add-1)) as $p) {
    $calc_date = strtotime(date("", strtotime($calc_date)) . " +1 day");
    while (is_helligdag($calc_date)){
      $calc_date = strtotime(date("", strtotime($calc_date)) . " +1 day");
    }
  }
  return $calc_date;
}
Avatar billede learner Praktikant
14. april 2011 - 00:30 #10
Okay nu er jeg vist færdig, men det virker ikke helt endnu. kan godt bruge hjælp med at få det til at virke.

function is_hverdag($date_to_check){
   
    // først et simpelt tjek om det er lørdag eller søndag
    if (date('N', strtotime($date_to_check))>5){
        return false;
    }
   
    $day     = date('j', strtotime($date_to_check));
    $month     = date('n', strtotime($date_to_check));
    $year     = date('Y', strtotime($date_to_check));
   
    $easterDate  = easter_date($year);
    $easterDay  = date('j', $easterDate);
    $easterMonth = date('n', $easterDate);
    $easterYear  = date('Y', $easterDate);
   
    $holidays = array(
        // These days have a fixed date
        mktime(0, 0, 0, 1,  1,  $year),  // 1. jan Nytårsdag
        //mktime(0, 0, 0, 5,  1,  $year),  // 1. maj
        mktime(0, 0, 0, 6,  5,  $year),  // 5. juni Grundlovsdag
        mktime(0, 0, 0, 12, 24, $year),  // 24. dec Juleaftensdag
        mktime(0, 0, 0, 12, 25, $year),  // 25. dec 1. Juledag

        // These days have a date depending on easter
        mktime(0, 0, 0, $easterMonth, $easterDay - 7,  $easterYear),     // Palmesøndag
        mktime(0, 0, 0, $easterMonth, $easterDay - 3,  $easterYear),     // Skærtorsdag
        mktime(0, 0, 0, $easterMonth, $easterDay - 2,  $easterYear),     // Langfredag
        mktime(0, 0, 0, $easterMonth, $easterDay,  $easterYear),         // Påskedag
        mktime(0, 0, 0, $easterMonth, $easterDay + 1,  $easterYear),     // 2. Påskedag
        mktime(0, 0, 0, $easterMonth, $easterDay + 26,  $easterYear),     // St. Bededag
        mktime(0, 0, 0, $easterMonth, $easterDay + 39, $easterYear),     // Kristi Himmelfart
        mktime(0, 0, 0, $easterMonth, $easterDay + 49, $easterYear),     // Pinse
        mktime(0, 0, 0, $easterMonth, $easterDay + 50, $easterYear),     // 2. Pinsedag
    );
   
    if ( in_array(mktime(0, 0, 0, $month, $day,  $year), $holidays) ){
        return false;
    } else {
        return true;
    }
}

function calc_date_hverdage($from_date, $num_days_to_add){
  $calc_date = $from_date;
  foreach (range(0, ($num_days_to_add-1)) as $p) {
    $calc_date = strtotime($calc_date . " +1 day");
    while (!is_hverdag($calc_date)){
      $calc_date = strtotime($calc_date . " +1 day");
    }
  }
  return $calc_date;
}
Avatar billede learner Praktikant
14. april 2011 - 00:55 #11
hmm tjoe den virker vist alligevel :o)...
Avatar billede siphon Nybegynder
14. april 2011 - 08:32 #12
looking good du kunne for sjov lave den om sådan man selv kunne vælge om den skal tælle lørdag søndag med - om man har lukket i pinsen eller ej - osv. Så har du dig noget som kunne bruges in das virkelighood :P
Avatar billede learner Praktikant
14. april 2011 - 09:15 #13
:o) that's korrekt :o)

jeg takker Jer for hjælpen og beder om at i smider nogen svar, da jeres links og hjælp har bragt mig i mål (endnu en gang) :o)
Avatar billede learner Praktikant
14. april 2011 - 09:20 #14
Blir sku sjovt når vi lancerer det her jeg er ved at lave. Jeg tror vi er nogen af de første der har en webshop som skriver til kunden hvis pakken er mere end 4 hverdage undervejs, at "vi har bemærket at din forsendelse er unormalt lang tid om at komme frem og vi kigger på det" + så sender den en besked til GLS som er vores fragtfirma noget i stil med "halløj GLS, kan I så få leveret denne pakke eller kontakte os snarest hvis der er noget galt"

jeg synes det er go service og rigtig smart.

+ denne funktion kan bruges til at skrive til kunden "du skal forvente at din pakke ankommer fredag, mandag eller senest tirdag"

er det ik lidt cool ? :o)
Avatar billede learner Praktikant
06. maj 2011 - 12:13 #15
lukker spørgsmålet

takker for assistancen
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