From a5b80e5d564f6c239510dbee10daf3ff4c314f2e Mon Sep 17 00:00:00 2001 From: Friendika Date: Tue, 22 Feb 2011 20:08:15 -0800 Subject: add some calendaring functions --- include/datetime.php | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) (limited to 'include/datetime.php') diff --git a/include/datetime.php b/include/datetime.php index b0279492b..724eec933 100644 --- a/include/datetime.php +++ b/include/datetime.php @@ -196,3 +196,114 @@ function age($dob,$owner_tz = '',$viewer_tz = '') { $year_diff--; return $year_diff; } + + + +// Get days in month +// get_dim($year, $month); +// returns number of days. +// $month[1] = 'January'; +// to match human usage. + +if(! function_exists('get_dim')) { +function get_dim($y,$m) { + + $dim = array( 0, + 31, 28, 31, 30, 31, 30, + 31, 31, 30, 31, 30, 31); + + if($m != 2) + return $dim[$m]; + if(((($y % 4) == 0) && (($y % 100) != 0)) || (($y % 400) == 0)) + return 29; + return $dim[2]; +}} + + +// Returns the first day in month for a given month, year +// get_first_dim($year,$month) +// returns 0 = Sunday through 6 = Saturday +// Months start at 1. + +if(! function_exists('get_first_dim')) { +function get_first_dim($y,$m) { + $d = sprintf('%04d-%02d-01 00:00', intval($y), intval($m)); + return datetime_convert('UTC','UTC',$d,'w'); +}} + +// output a calendar for the given month, year. +// if $links are provided (array), e.g. $links[12] => 'http://mylink' , +// date 12 will be linked appropriately. Today's date is also noted by +// altering td class. +// Months count from 1. + + +// TODO: provide (prev,next) links, define class variations for different size calendars + + +if(! function_exists('cal')) { +function cal($y = 0,$m = 0, $links = false) { + + + // month table - start at 1 to match human usage. + + $mtab = array(' ', + 'January','February','March', + 'April','May','June', + 'July','August','September', + 'October','November','December' + ); + + $thisyear = datetime_convert('UTC',date_default_timezone_get(),'now','Y'); + $thismonth = datetime_convert('UTC',date_default_timezone_get(),'now','m'); + if(! $y) + $y = $thisyear; + if(! $m) + $m = intval($thismonth); + + $dn = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); + $f = get_first_dim($y,$m); + $l = get_dim($y,$m); + $d = 1; + $dow = 0; + $started = false; + + if(($y == $thisyear) && ($m == $thismonth)) + $tddate = intval(datetime_convert('UTC',date_default_timezone_get(),'now','j')); + + $str_month = day_translate($mtab[$m]); + $o = ''; + $o .= ""; + for($a = 0; $a < 7; $a ++) + $o .= ''; + $o .= ''; + + while($d <= $l) { + if(($dow == $f) && (! $started)) + $started = true; + $today = (((isset($tddate)) && ($tddate == $d)) ? "class=\"today\" " : ''); + $o .= "'; + $dow ++; + if(($dow == 7) && ($d <= $l)) { + $dow = 0; + $o .= ''; + } + } + if($dow) + for($a = $dow; $a < 7; $a ++) + $o .= ''; + $o .= '
$str_month $y
' . substr(day_translate($dn[$a]),0,3) . '
"; + $day = str_replace(' ',' ',sprintf('%2.2d', $d)); + if($started) { + if(is_array($links) && isset($links[$d])) + $o .= "$day"; + else + $o .= $day; + $d ++; + } + else + $o .= ' '; + $o .= '
 
'."\r\n"; + + return $o; +}} -- cgit v1.2.3