| version 1.1, 2005/06/05 12:14:12 |
version 1.2, 2005/11/07 20:37:29 |
|
|
| <?php |
<?php |
| // |
|
| // +----------------------------------------------------------------------+ |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
| // | PHP Version 4 | |
|
| // +----------------------------------------------------------------------+ |
|
| // | Copyright (c) 1997-2003 The PHP Group | |
|
| // +----------------------------------------------------------------------+ |
|
| // | This source file is subject to version 2.0 of the PHP license, | |
|
| // | that is bundled with this package in the file LICENSE, and is | |
|
| // | available at through the world-wide-web at | |
|
| // | http://www.php.net/license/2_02.txt. | |
|
| // | If you did not receive a copy of the PHP license and are unable to | |
|
| // | obtain it through the world-wide-web, please send a note to | |
|
| // | license@php.net so we can mail you a copy immediately. | |
|
| // +----------------------------------------------------------------------+ |
|
| // | Author: Allan Kent <allan@lodestone.co.za> | |
|
| // +----------------------------------------------------------------------+ |
|
| // |
|
| // $Id$ |
|
| // |
|
| |
|
| /** |
/** |
| * Class to convert date strings between Gregorian and Human calendar formats. |
* Class to convert date strings between Gregorian and Human calendar formats |
| |
* |
| * The Human Calendar format has been proposed by Scott Flansburg and can be |
* The Human Calendar format has been proposed by Scott Flansburg and can be |
| * explained as follows: |
* explained as follows: |
| * The year is made up of 13 months |
* The year is made up of 13 months |
|
|
| * New Years day (00) is a monthless day |
* New Years day (00) is a monthless day |
| * Note: Leap Years are not yet accounted for in the Human Calendar system |
* Note: Leap Years are not yet accounted for in the Human Calendar system |
| * |
* |
| * @since PHP 4.0.4 |
* PHP versions 4 and 5 |
| * @author Allan Kent <allan@lodestone.co.za> |
* |
| |
* LICENSE: This source file is subject to version 2.02 of the PHP license |
| |
* that is available through the world-wide-web at the following URI: |
| |
* http://www.php.net/license/2_02.txt. If you did not receive a copy of |
| |
* the PHP License and are unable to obtain it through the web, please |
| |
* send a note to license@php.net so we can mail you a copy immediately. |
| |
* |
| |
* @category Date and Time |
| |
* @package Date |
| |
* @author Allan Kent <allan@lodestone.co.za> |
| |
* @copyright 1997-2005 The PHP Group |
| |
* @license http://www.php.net/license/2_02.txt PHP License |
| |
* @version CVS: $Id$ |
| |
* @link http://pear.php.net/package/Date |
| |
* @since File available since Release 1.3 |
| |
*/ |
| |
|
| |
/** |
| |
* Class to convert date strings between Gregorian and Human calendar formats |
| |
* |
| |
* The Human Calendar format has been proposed by Scott Flansburg and can be |
| |
* explained as follows: |
| |
* The year is made up of 13 months |
| |
* Each month has 28 days |
| |
* Counting of months starts from 0 (zero) so the months will run from 0 to 12 |
| |
* New Years day (00) is a monthless day |
| |
* Note: Leap Years are not yet accounted for in the Human Calendar system |
| |
* |
| |
* @author Allan Kent <allan@lodestone.co.za> |
| |
* @copyright 1997-2005 The PHP Group |
| |
* @license http://www.php.net/license/2_02.txt PHP License |
| |
* @version Release: 1.4.5 |
| |
* @link http://pear.php.net/package/Date |
| |
* @since Class available since Release 1.3 |
| */ |
*/ |
| class Date_Human |
class Date_Human |
| { |
{ |
| |
|
| /** |
/** |
| * Returns an associative array containing the converted date information |
* Returns an associative array containing the converted date information |
| * in 'Human Calendar' format. |
* in 'Human Calendar' format. |
|
|
| */ |
*/ |
| function gregorianToHuman($day=0, $month=0, $year=0) |
function gregorianToHuman($day=0, $month=0, $year=0) |
| { |
{ |
| /** |
/* |
| * Check to see if any of the arguments are empty |
* Check to see if any of the arguments are empty |
| * If they are then populate the $dateinfo array |
* If they are then populate the $dateinfo array |
| * Then check to see which arguments are empty and fill |
* Then check to see which arguments are empty and fill |
|
|
| if (empty($year)) { |
if (empty($year)) { |
| $year = $dateinfo["year"]; |
$year = $dateinfo["year"]; |
| } |
} |
| /** |
/* |
| * We need to know how many days into the year we are |
* We need to know how many days into the year we are |
| */ |
*/ |
| $dateinfo = getdate(mktime(0, 0, 0, $month, $day, $year)); |
$dateinfo = getdate(mktime(0, 0, 0, $month, $day, $year)); |
| $dayofyear = $dateinfo["yday"]; |
$dayofyear = $dateinfo["yday"]; |
| /** |
/* |
| * Human Calendar starts at 0 for months and the first day of the year |
* Human Calendar starts at 0 for months and the first day of the year |
| * is designated 00, so we need to start our day of the year at 0 for |
* is designated 00, so we need to start our day of the year at 0 for |
| * these calculations. |
* these calculations. |
|
| Line 113 class Date_Human |
|
| * gets around this. |
* gets around this. |
| */ |
*/ |
| $dayofyear--; |
$dayofyear--; |
| /** |
/* |
| * 28 days in a month... |
* 28 days in a month... |
| */ |
*/ |
| $humanMonthOfYear = floor($dayofyear / 28); |
$humanMonthOfYear = floor($dayofyear / 28); |
| /** |
/* |
| * If we are in the first month then the day of the month is $dayofyear |
* If we are in the first month then the day of the month is $dayofyear |
| * else we need to find the modulus of 28. |
* else we need to find the modulus of 28. |
| */ |
*/ |
| Line 110 class Date_Human |
|
| Line 126 class Date_Human |
|
| } else { |
} else { |
| $humanDayOfMonth = ($dayofyear) % 28; |
$humanDayOfMonth = ($dayofyear) % 28; |
| } |
} |
| /** |
/* |
| * Day of the week is modulus 7 |
* Day of the week is modulus 7 |
| */ |
*/ |
| $humanDayOfWeek = $dayofyear % 7; |
$humanDayOfWeek = $dayofyear % 7; |
| /** |
/* |
| * We can now increment $dayofyear back to it's correct value for |
* We can now increment $dayofyear back to it's correct value for |
| * the remainder of the calculations |
* the remainder of the calculations |
| */ |
*/ |
| $dayofyear++; |
$dayofyear++; |
| /** |
/* |
| * $humanDayOfMonth needs to be incremented now - recall that we fudged |
* $humanDayOfMonth needs to be incremented now - recall that we fudged |
| * it a bit by decrementing $dayofyear earlier |
* it a bit by decrementing $dayofyear earlier |
| * Same goes for $humanDayOfWeek |
* Same goes for $humanDayOfWeek |
| */ |
*/ |
| $humanDayOfMonth++; |
$humanDayOfMonth++; |
| $humanDayOfWeek++; |
$humanDayOfWeek++; |
| /** |
/* |
| * Week of the month is day of the month divided by 7, rounded up |
* Week of the month is day of the month divided by 7, rounded up |
| * Same for week of the year, but use $dayofyear instead $humanDayOfMonth |
* Same for week of the year, but use $dayofyear instead $humanDayOfMonth |
| */ |
*/ |
| $humanWeekOfMonth = ceil($humanDayOfMonth / 7); |
$humanWeekOfMonth = ceil($humanDayOfMonth / 7); |
| $humanWeekOfYear = ceil($dayofyear / 7); |
$humanWeekOfYear = ceil($dayofyear / 7); |
| /** |
/* |
| * Return an associative array of the values |
* Return an associative array of the values |
| */ |
*/ |
| return array( |
return array( |
| Line 156 class Date_Human |
|
| Line 172 class Date_Human |
|
| */ |
*/ |
| function HumanToGregorian($day, $month, $year=0) |
function HumanToGregorian($day, $month, $year=0) |
| { |
{ |
| /** |
/* |
| * Check to see if the year has been passed through. |
* Check to see if the year has been passed through. |
| * If not get current year |
* If not get current year |
| */ |
*/ |
| Line 164 class Date_Human |
|
| Line 180 class Date_Human |
|
| $dateinfo = getdate(time()); |
$dateinfo = getdate(time()); |
| $year = $dateinfo["year"]; |
$year = $dateinfo["year"]; |
| } |
} |
| /** |
/* |
| * We need to get the day of the year that we are currently at so that |
* We need to get the day of the year that we are currently at so that |
| * we can work out the Gregorian Month and day |
* we can work out the Gregorian Month and day |
| */ |
*/ |
| $DayOfYear = $month * 28; |
$DayOfYear = $month * 28; |
| $DayOfYear += $day; |
$DayOfYear += $day; |
| /** |
/* |
| * Human Calendar starts at 0, so we need to increment $DayOfYear |
* Human Calendar starts at 0, so we need to increment $DayOfYear |
| * to take into account the day 00 |
* to take into account the day 00 |
| */ |
*/ |
| $DayOfYear++; |
$DayOfYear++; |
| /** |
/* |
| * the mktime() function will correctly calculate the date for out of |
* the mktime() function will correctly calculate the date for out of |
| * range values, so putting $DayOfYear instead of the day of the month |
* range values, so putting $DayOfYear instead of the day of the month |
| * will work fine. |
* will work fine. |
| Line 183 class Date_Human |
|
| Line 199 class Date_Human |
|
| $GregorianTimeStamp = mktime(0, 0, 0, 1, $DayOfYear, $year); |
$GregorianTimeStamp = mktime(0, 0, 0, 1, $DayOfYear, $year); |
| return $GregorianTimeStamp; |
return $GregorianTimeStamp; |
| } |
} |
| |
|
| } |
} |
| |
|
| ?> |
?> |