X-Git-Url: https://jasonwoof.com/gitweb/?p=wfpl.git;a=blobdiff_plain;f=time.php;h=9aa479dd5ebb3b280ffb83cae8298080ae1737ac;hp=4c6b1f17e84cdfbe45f49b86f6b9cbcb3c2cc975;hb=HEAD;hpb=856f805c6cbb6e712c662214f3b5821442f808a0 diff --git a/time.php b/time.php index 4c6b1f1..9aa479d 100644 --- a/time.php +++ b/time.php @@ -1,25 +1,20 @@ . +# This program is in the public domain within the United States. Additionally, +# we waive copyright and related rights in the work worldwide through the CC0 +# 1.0 Universal public domain dedication, which can be found at +# http://creativecommons.org/publicdomain/zero/1.0/ # This file contains functions to manipulate/calculate dates/times +# argument in format: YYYY-MM-DD +function yyyymmdd_to_days($str) { + return ymd_to_days((int)substr($str, 0, 4), (int)substr($str, 5, 2), (int)substr($str, 8, 2)); +} +# args must be integers function ymd_to_days($year, $month, $day) { - return (int)(mktime(12,0,0,$month,$day, $year, 0) / 86400); + return (int)(mktime(12,0,0,$month,$day, $year) / 86400); } function days_to_ymd($days) { @@ -62,18 +57,21 @@ function clean_ymd($year, $month, $day) { } if($day < 1) { $day = 1; - } elseif($day > 31) { - # FIXME this should check the month - $day = 31; + } else { + $max = date('t', mktime(12, 0, 0, $month, 1, $year)); + if($day > $max) { + $day = $max; + } } return array($year, $month, $day); } -# convert date string from mm/dd/yyyy to yyyy-mm-dd -function mdy_to_ymd($date) { - $date = ereg_replace('[^0-9/-]', '', $date); - $date = ereg_replace('-', '/', $date); +# pass date like 3/21/99 +# returns array(year, month, day) +function mdy_clean($date) { + $date = preg_replace('|[^0-9/-]|', '', $date); + $date = preg_replace('|-|', '/', $date); $parts = explode('/', $date); switch(count($parts)) { case 1: @@ -92,20 +90,25 @@ function mdy_to_ymd($date) { list($month, $day, $year) = $parts; } - list($year, $month, $day) = clean_ymd($year, $month, $day); + return clean_ymd($year, $month, $day); +} +# convert date string from mm/dd/yyyy to yyyy-mm-dd +function mdy_to_ymd($date) { + list($year, $month, $day) = mdy_clean($date); return sprintf('%04u-%02u-%02u', $year, $month, $day); } -# convert date string from yyy-mm-dd to mm/dd/yyyy -function ymd_to_mdy($date) { - $date = ereg_replace('[^0-9/-]', '', $date); - $date = ereg_replace('/', '-', $date); +# pass date like 2008-11-21 +# returns array(year, month, day) +function ymd_clean($date) { + $date = preg_replace('|[^0-9/-]|', '', $date); + $date = preg_replace('|/|', '-', $date); $parts = explode('-', $date); switch(count($parts)) { case 1: $year = $parts[0]; - if(strlen($year) == 0) { + if(strlen($year) == 0 || $year < 1971 || $year > 2050) { list($year, $month, $day) = explode('-', date('Y-m-d')); } else { list($month, $day) = explode('-', date('m-d')); @@ -119,13 +122,11 @@ function ymd_to_mdy($date) { list($year, $month, $day) = $parts; } - list($year, $month, $day) = clean_ymd($year, $month, $day); - - return sprintf('%02u/%02u/%04u', $month, $day, $year); + return clean_ymd($year, $month, $day); } -function enc_mdy($date) { - return ymd_to_mdy($date); +# convert date string from yyyy-mm-dd to mm/dd/yyyy +function ymd_to_mdy($str) { + list($year, $month, $day) = ymd_clean($str); + return sprintf('%02u/%02u/%04u', $month, $day, $year); } - -?>