xatic Skrevet 22. november 2012 Del Skrevet 22. november 2012 Hei, Sitter og jobber med ett kalendersystem jeg skal bruke. Men, sitter med ett lite problem. Hvordan kan jeg finne ut hvor mange lørdager og søndager det er i en måned? Dette varierer jo, så må jo fylle inn hvilken måned det er, men dette er greit nok. Noen ide på hvordan jeg kan løse dette? Lenke til kommentar
grapz Skrevet 22. november 2012 Del Skrevet 22. november 2012 (endret) Hei, Du finner det meste her: http://php.net/manua...nction.date.php Et eksempel jeg lagte (ikke produksjonsklart, veldigt basic, viser bare en måte å gjøre det på): <?php date_default_timezone_set('UTC'); # Bruker velger Mars 2013, lagre det i $year og $month $year = 2013; $month = 3; $day = 1; $inputdate = mktime(0, 0, 0, $month, $day, $year); switch(date("D", $inputdate)) { case "Mon": $day += 5; break; case "Tue": $day += 4; break; case "Wed": $day += 3; break; case "Thu": $day += 2; break; case "Fri": $day += 1; break; case "Sat": $day += 0; break; case "Sun": $day += 6; break; default: break; } $sats = array(); while($day <= 31) { array_push($sats, $day); $day += 7; } var_dump($sats); Her er det også flere måter: http://stackoverflow.com/questions/4293174/grab-all-wednesdays-in-a-given-month-in-php Endret 22. november 2012 av grapz Lenke til kommentar
TheClown Skrevet 22. november 2012 Del Skrevet 22. november 2012 Dette er ikke helt korrekt: while($day <= 31) { Du går ut i fra at det er 31 dager i hver måned, det er ikke riktig. Du burde heller gjøre følgende: while($day <= date('j',$inputdate)) { date('j') henter ut antall dager i måneden. Lenke til kommentar
grapz Skrevet 22. november 2012 Del Skrevet 22. november 2012 Dette er ikke helt korrekt: while($day <= 31) { Du går ut i fra at det er 31 dager i hver måned, det er ikke riktig. Du burde heller gjøre følgende: while($day <= date('j',$inputdate)) { date('j') henter ut antall dager i måneden. Ja, stemmer det. Gikk litt fort i svingene her Vil uansett anbefale å bruker det svaret som er godtatt i den SO artikkelen, i plassen for mitt rask Lenke til kommentar
xibriz Skrevet 23. november 2012 Del Skrevet 23. november 2012 Snill som jeg er, skal jeg gi deg litt gratis kode som jeg lager for flere år siden Denne koden: /** * Funksjon som returnerer alle dagene i en måned, fra mandag i måneden før til søndag i måneden etter * * @param integer $month * @param integer $year * @return array */ function getMonthArray($month = null, $year = null) { $i = 0; //Setter måned til denne måneden hvis ingen er satt if ($month == null) { $month = date("m"); } //Setter år til dette året hvis ingen er satt if ($year == null) { $year = date("Y"); } //Finner timestamp til første mandag i den føste uken til denne måneden $timestamp = mktime(0, 0, 0, $month, 1-(date("N", mktime(0, 0, 0, $month, 1, $year))-1), $year); $monthArray = array(); //En måned kan max gå over 6 uker for ($weekCount = 0; $weekCount < 6; $i++) { //Hvis vi går inn i neste måned, å treffer en mandag i det samme året går vi ut av forløkken if (date("m", $timestamp) > $month && date("N", $timestamp) == 1 && date("Y", $timestamp) == $year) break; //Hvis vi har en måned som er mindre enn den vi startet i, å treffer en mandag i neste år går vi ut av forløkken else if (date("m", $timestamp) < $month && date("N", $timestamp) == 1 && date("Y", $timestamp) > $year) break; //Legger til dagen i arrayet $monthArray[] = date("d", $timestamp); //Hvis vi treffer en søndag inkrementerer vi til neste uke if (date("N", $timestamp) == 7) $weekCount++; //Legger til en dag (må bruke strtotime, ikke legge til antall sekunder i en dag pga. sommer/vintertid) $timestamp = strtotime("+1 day", $timestamp); } //Returnerer arrayet med alle dagene i denne måneden (pluss evt. noen før å etter) return $monthArray; } Er grunnlaet for denne kalenderen: Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå