Wochentage / Tage

Wie findet man den ersten Montag im Jahr? Wie kann man den Wochentag in der aktuellen Sprache ausgeben? Wie findet man den Montag in einer Kalenderwoche? Wie erkennt man ein Schaltjahr?

Erster Montag im Jahr finden


function firstkw($jahr) {
	$erster = mktime(0,0,0,1,1,$jahr);
	$wtag = date('w',$erster);
	if ($wtag<= 4) {
		/**
		* Donnerstag oder kleiner: auf den Montag zurückrechnen.
		*/
		$montag = mktime(0,0,0,1,1-($wtag-1),$jahr);
	} else {
		/**
		* auf den Montag nach vorne rechnen.
		*/
		$montag = mktime(0,0,0,1,1+(7-$wtag+1),$jahr);
	}
	return $montag;
}

# Beispiel Aufrufe
$montag = firstkw(date('Y'));

$montag = firstkw(2012);
echo date("d.m.Y",$montag); // 02.01.2012 

$montag = firstkw(2011);
echo date("d.m.Y",$montag); // 03.01.2011 

$montag = firstkw(2010);
echo date("d.m.Y",$montag); // 04.01.2010 

$montag = firstkw(1999);
echo date("d.m.Y",$montag); // 04.01.1999  


Montag in Kalenderwoche finden


function mondaykw($kw,$jahr) {
	$firstmonday = firstkw($jahr);
	$m_monat = date('m',$firstmonday);
	$m_jahr = date('Y',$firstmonday);
	$m_tage = date('d',$firstmonday);
	$tage =($kw-1)*7;
	$mondaykw = mktime(0,0,0,$m_monat,$m_tage+$tage,$m_jahr);
	return $mondaykw;
}

# Beispiel Aufrufe
$montag = mondaykw(date('W'),date('Y'));

$montag = mondaykw(25,1999);
echo date("d.m.Y",$montag); // 21.06.1999 

$montag = mondaykw(41,2011);
echo date("d.m.Y",$montag); // 10.10.2011 




Datum von Tag im Jahr finden


function dayofyear2date( $tDay, $tYear = 0, $tFormat = 'd-m-Y') {
	$offset = intval($tDay) * 86400;
	$year = ($tYear > 0) ? $tYear : date('Y');
	$date = mktime( 0, 0, 0, 1, 1, $year )+$offset;
	return date( $tFormat, $date );
}

# Beispiel Aufrufe
$heute = dayofyear2date(date('z'),date('Y'));

$datum = dayofyear2date(200,2000);
echo $datum; // 19-07-2000 

$datum = dayofyear2date(date('z'));
echo $datum; // ... heute, weil date('Y')

$datum = dayofyear2date(150,2012,'d.m.Y');
echo $datum; // 30.05.2012 




Anzahl Tage im Jahr


$days_of_year = date("z",mktime(0, 0, 0, 12, 31, date('Y')));

for($d=0;$d<=$days_of_year;$d++) {
	$date = dayofyear2date($d,date('Y'));
	$dtime = strtotime($date);
	// ....
}

# Beispiel Aufrufe
// anzahl im aktuellen jahr
echo date("z",mktime(0, 0, 0, 12, 31, date('Y')))+1;

// 366, weil es mit 0 beginnt hätte PHP nur 365
echo date("z",mktime(0, 0, 0, 12, 31, 2000))+1; 

// 365
echo = date("z",mktime(0, 0, 0, 12, 31, 2013))+1; 

// 364, weil PHP mit 0 beginnt
echo date("z",mktime(0, 0, 0, 12, 31, 1955)); 

// mehr infos zum Jahr : http://de.wikipedia.org/wiki/Jahr





Montag statt Monday ausgeben ( Wochentag auf Deutsch )


// Setzt die zu verwendende Standardzeitzone. Verfügbar seit PHP 5.1
date_default_timezone_set('UTC');
// Weil nach UTF-8 Sprachpakete gesucht wird ...
ini_set('default_charset', 'UTF-8');

// Works on Ubuntu 8.04 Server
$loc_de = setlocale(LC_TIME, 'de_DE.UTF8', 'de.UTF8', 'de_DE.UTF-8', 'de.UTF-8');
$loc_it = setlocale(LC_TIME, 'it_IT.UTF8', 'it.UTF8', 'it_IT.UTF-8', 'it.UTF-8');
$loc_fr = setlocale(LC_TIME, 'fr_FR.UTF8', 'fr.UTF8', 'fr_FR.UTF-8', 'fr.UTF-8');

// Richtiges Sprachpaket auf Server finden ( per shell: locale -a )
echo "Preferred locale for german on this system is ' $loc_de '" ;
echo "Preferred locale for italiano on this system is ' $loc_it '" ;
echo "Preferred locale for français on this system is ' $loc_fr '" ;

// ohne dies wird $loc_fr verwendet 
setlocale(LC_TIME, $loc_de);

// Infos zu Locales: http://tom-muck.com/cw/linuxlocales.cfm/
Einstellungen damit Montag in der richtigen Sprache erscheint