======[PHP] Erweiterte Datumsfunktionen====== Einige Funktionen rund um Datum =====Testaufruf der Funktionen===== '; echo 'Erster Tag des Monats: '.date("d.m.Y - H:i:s", $firstDay).'
'; echo 'Letzter Tag des Monats: '.date("d.m.Y - H:i:s", $lastDay).'
'; echo 'Letzter Tag des Monats (Nur Datum): '.date("d.m.Y - H:i:s", truncDate($lastDay)).'
'; echo 'Woche: '.$weekNr.'
';
=====lastDayOfMonth===== /** * letzter Tage des Monats * @param timestamp * @return timestamp */ function lastDayOfMonth($date){ //Zitat von PHP.net zu mktime: //'Der letzte Tag eines gegebenen Monats kann als Tag "0" des folgenden //Monats ausgedrückt werden, nicht jedoch als Tag "-1"' return mktime(0, 0, 0, date('m', $date)+1, 0, date('Y', $date)); } =====firstDayOfMonth===== /** * erster Tag des Monats * @param timestamp * @return timestamp */ function firstDayOfMonth($date){ return mktime(0, 0, 0, date('m', $date), 1, date('y', $date)); } =====truncDate===== /** * kürzt den timestamp auf das Datum * @param timestamp * @return timestamp */ function truncDate($date){ return mktime(0, 0, 0, date('m', $date), date('d', $date), date('Y', $date)); } erweiterte Function /** * @example truncDate($date[, $min[, $max]]); * @param $date Date Datum das gekürzt werden sollte * @param $min String Schlüssel der unteren Limite * @param $max String Schlüssel der obeen Limite * @return Date gekürztes Datum */ function truncDate($date, $min = 'mday', $max = 'year'){ $order = array('seconds', 'minutes', 'hours', 'mday', 'mon', 'year',); $minId = array_search($min, $order); $maxId = array_search($max, $order); $dateInfo = getdate($date); $keys = array_flip(array_slice($order, $minId, $maxId-$minId+1, true)); $parts = array_intersect_key($dateInfo, $keys); $defaults = array_fill_keys(array_keys($dateInfo), 0); $parts = array_merge($defaults, $parts); return mktime($parts['seconds'], $parts['minutes'], $parts['hours'], $parts['mon'], $parts['mday'], $parts['year']); } =====mkdate===== /** * create a date without time * @param int $month * @param int $day * @param int $year * @return timestamp */ function mkdate($month, $day, $year){return mktime(0, 0, 0, $month, $day, $year);} =====getWeekNr===== /** * date('W') liefert für uns die falsche Wochennummer. Wir wollen nach ISO 8601:1988 * (erste Woche = Woche mit mindestens 4 Tage des neuen Jahres * @param timestamp $date * @return int */ function getWeekNr($date){ //Windows kann nicht alle Formatierbefehle. Darum muss die Woche nach ISO 8601:1988 Format anderst hergeholt werden //Version für Windows: if (stristr(PHP_OS, "win")<>false){ return getWeekNumber(date('j', $date), date('n', $date), date('Y', $date)); } else { //Version für Unix: return (Integer) strftime('%V', $date); } } // [url]http://theserverpages.com/php/manual/en/function.strftime.php[/url] // Get the week number in ISO 8601:1988 format // This helsp when %V is not working on your Win32 machine function getWeekNumber($day, $month, $year) { $week = strftime("%W", mktime(0, 0, 0, $month, $day, $year)); $yearBeginWeekDay = strftime("%w", mktime(0, 0, 0, 1, 1, $year)); $yearEndWeekDay = strftime("%w", mktime(0, 0, 0, 12, 31, $year)); // make the checks for the year beginning if($yearBeginWeekDay > 0 && $yearBeginWeekDay < 5) { // First week of the year begins during Monday-Thursday. // Currently first week is 0, so all weeks should be incremented by one $week++; } else if($week == 0) { // First week of the year begins during Friday-Sunday. // First week should be 53, and other weeks should remain as they are $week = 53; } // make the checks for the year end, these only apply to the weak 53 if($week == 53 && $yearEndWeekDay > 0 && $yearEndWeekDay < 5) { // Currently the last week of the year is week 53. // Last week of the year begins during Friday-Sunday // Last week should be week 1 $week = 1; } // return the correct ISO 8601:1988 week (in two digit format) return( substr('0'. $week, -2) ); } {{tag>PHP Date Function}}