Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   PHP : datum bepalen aan de hand van dag van het jaar (https://forum.scholieren.com/showthread.php?t=13091)

TouchOfDarkness 25-01-2002 09:23

PHP : datum bepalen aan de hand van dag van het jaar
 
heb het me al een tijdje zitten afvragen, hoe doe ik het volgende met date() en mktime():

date("z") = dag van het jaar, dus 0 - 365

dus vandaag : date("z") = 24;

hoe kom ik nu, met bv. mktime() terug naar wat voor datum bij dat dagnummer hoort?

duidelijk is dat dit niet werkt :

Code:

$day = date("z");
echo date("Y-m-d", mktime(0,0,0,0,$day,0));
echo date("Y-m-d", mktime(0,0,0,$day));

iemand een idee hoe dit wel te fixen? http://forum.scholieren.com/smile.gif

Jon 25-01-2002 13:07

Met alleen het dagnummer kun je weinig beginnen; je moet ook rekening houden met het jaar (ivm schrikkeljaren).

Manuzhai 25-01-2002 13:24

In principe moet je wel kunnen mktime()en, maar dan moet je dus wel het jaar meegeven, denk ik.

Manuzhai

Doc 25-01-2002 13:54

Ik weer eens lief zijn en iemand proberen te helpen door een lap code te typen http://forum.scholieren.com/biggrin.gif
Code:

// Functie komt van PHP.NET
// --------------------------
function days_in_feb($year){

        //$year must be YYYY
        //[gregorian] leap year math :
       
        if ($year < 0) $year++;
        $year += 4800;

    if ( ($year % 4) == 0) {
                if (($year % 100) == 0) {
                    if (($year % 400) == 0) {
                                return(29);
                    } else {
                                return(28);
                    }
                } else {
                    return(29);
                }
    } else {
                return(28);
    }
}
// Functie day2date($days, $year)
// Geschreven door: Paul Olthof
// © Copyright Paul Olthof 2002
// --------------------------
function days2date($days, $year){
  // Januari
  if($days<=31){
      $date = date("Y-m-d", mktime(0,0,0,0,$days,$year));
  }
  // Februari
  if($days<=(31+days_in_feb($year))){
      $date = date("Y-m-d", mktime(0,0,0,1,$days-31,$year));
  }
  // Maart
  if($days<=(62+days_in_feb($year))){
      $date = date("Y-m-d", mktime(0,0,0,2,$days-(31+days_in_feb($year)),$year));
  }
  // April
  if($days<=(92+days_in_feb($year))){
      $date = date("Y-m-d", mktime(0,0,0,3,$days-(62+days_in_feb($year)),$year));
  }
  // Mei
  if($days<=(123+days_in_feb($year))){
      $date = date("Y-m-d", mktime(0,0,0,4,$days-(92+days_in_feb($year)),$year));
  }
  // Juni
  if($days<=(153+days_in_feb($year))){
      $date = date("Y-m-d", mktime(0,0,0,5,$days-(123+days_in_feb($year)),$year));
  }
  // Juli
  if($days<=(184+days_in_feb($year))){
      $date = date("Y-m-d", mktime(0,0,0,6,$days-(153+days_in_feb($year)),$year));
  }
  // Augustus
  if($days<=(215+days_in_feb($year))){
      $date = date("Y-m-d", mktime(0,0,0,7,$days-(184+days_in_feb($year)),$year));
  }
  // September
  if($days<=(245+days_in_feb($year))){
      $date = date("Y-m-d", mktime(0,0,0,8,$days-(215+days_in_feb($year)),$year));
  }
  // Oktober
  if($days<=(276+days_in_feb($year))){
      $date = date("Y-m-d", mktime(0,0,0,9,$days-(245+days_in_feb($year)),$year));
  }
  // November
  if($days<=(306+days_in_feb($year))){
      $date = date("Y-m-d", mktime(0,0,0,10,$days-(276+days_in_feb($year)),$year));
  }
  // December
  if($days<=(337+days_in_feb($year))){
      $date = date("Y-m-d", mktime(0,0,0,11,$days-(306+days_in_feb($year)),$year));
  }
  // Teveel - Doe Recursie
  if($days>(337+days_in_feb($year))){
      $date = day2date($days-(337+days_in_feb($year)));
  }
  return $date;
}

Zo deze functie heb ik snel ff geschreven, want ik wist geen functie om dit uit te voeren, ik hoop dat 'ie werkt, want ik heb 'm niet getest...als je 'm gebruikt, dat is 't wel vriendelijk om de credits te vermelden http://forum.scholieren.com/wink.gif En uiteraard © Copyright Paul Olthof 2002

Veel suc6!

Chimera 25-01-2002 16:24

Grappig. PHP rekent namelijk zelf automatisch de juiste dag uit. Probeer 300-01-2002 maar eens.

TouchOfDarkness 25-01-2002 17:58

Citaat:

Chimera schreef:
Grappig. PHP rekent namelijk zelf automatisch de juiste dag uit. Probeer 300-01-2002 maar eens.


figures....had ik ff nie bij nagedacht http://forum.scholieren.com/smile.gif

thnx!

TouchOfDarkness 25-01-2002 18:00

Citaat:

Doc schreef:
Ik weer eens lief zijn en iemand proberen te helpen door een lap code te typen http://forum.scholieren.com/biggrin.gif
Functie komt van PHP.NET

<< knip >>

whehe ontzettend bedankt voor de moeite maar zoals Chimera al zei: http://forum.scholieren.com/wink.gif

Code:

$today = date("z");
$dag = date("Y-m-d", mktime(0,0,0,date("m"),$today,date("Y")));
echo $dag;


Doc 25-01-2002 19:46

Citaat:

TouchOfDarkness schreef:
Code:

$today = date("z");
$dag = date("Y-m-d", mktime(0,0,0,date("m"),$today,date("Y")));
echo $dag;


Dat d8 ik dus ook, maarjah...ik had ff zin om een blok code te typen http://forum.scholieren.com/biggrin.gif http://forum.scholieren.com/wink.gif

Speedo 25-01-2002 20:05

Zoals voor alle leuke dingen in het leven hebben slimme mensen hier ook weer een algoritme voor bedacht. Ik ga je geen code geven maar hieronder staat de pseudo:

// Gebruik de volgende formule om van
// een datum naar een dag van de week te
// om te rekenen :

( jaar + jaar / 4 + dag + maandgetal ) / 7 ;

// Hier neem je de rest uit (->modulo="%"=restdeling)

// Jaar is laatste twee cijfers van dat jaar
// Jaar / 4 -> naar beneden afronden
// Dag = dag v.d. maand
// Maandgetal :
// - Januari : 1
// - Februari : 4
// - Maart : 4
// - April : 0
// - Mei : 2
// - Juni : 5
// - Juli : 0
// - Augustus : 3
// - September : 6
// - Oktober : 1
// - November : 4
// - December : 6


// Schrikkeljaar -> Alle maandgetallen++ ;
// De rest v.d. deling geeft de dag aan: 1-> Zondag, 2 -> Maandag, ..... 0-> Zaterdag

// Alles wat je hoeft te doen is de hele formule omkeren (tip: php is handig met arrays dus voor de maandgetallen gebruik je die

// (Vergeet niet de teller van de breuk te "++" -en als je een datum na 01012001 uit wil rekenen.

Doc 25-01-2002 20:09

Als je in een jaar zit dat weer deelbaar is door 400 dan is er juist weer geen schrikkeljaar ofzo....was nog zo'n uitzonderings regel

Speedo 25-01-2002 20:19

Owja de bovenstaande code is voor als je de dag van de week hebt en dan de datum moet hebben. Als je van de dag in het jaar uitgaat moet je het als volgt aanpakken:

// Een jaar bestaat uit 12 maanden
// Deze maanden hebben verschillende aantallen dagen (31/28 of 29/31/30/31 enz.)
// Controleer in welke maand de dag die je moet hebben valt
// Zoek de bijbehorende week dr bij
// En dan heb je de dag ook zo te pakken
// ALs je codevoorbeelden moet hebben zeg je het maar

mzzzl

TouchOfDarkness 26-01-2002 13:52

wat jij nou precies wil vertellen Speedo is mij een raadsel, de dag van de week bepalen in PHP kan echt veel makkelijk http://forum.scholieren.com/tongue.gif

functie date() bestaat nie voor nix http://forum.scholieren.com/smile.gif

Chimera 26-01-2002 14:23

Citaat:

TouchOfDarkness schreef:
wat jij nou precies wil vertellen Speedo is mij een raadsel, de dag van de week bepalen in PHP kan echt veel makkelijk http://forum.scholieren.com/tongue.gif

Idd. Dergelijke functies zelf schrijven is nogal een klein beetje tijdverspilling. http://forum.scholieren.com/biggrin.gif


Alle tijden zijn GMT +1. Het is nu 14:35.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.