Gå til innhold

Finne ut hvor mange spesifikke dager i en måned


Anbefalte innlegg

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
Videoannonse
Annonse

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 av grapz
Lenke til kommentar

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

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:

 

post-69923-0-75739200-1353693556_thumb.jpg

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...