X-Git-Url: https://jasonwoof.com/gitweb/?p=wfpl.git;a=blobdiff_plain;f=time.php;h=3c42f79dbde7d354e02f4f1c903b3102e6bbedc2;hp=501d89cf1138475466e17d1cc1692a4bd33e9104;hb=15459c86d0996ab3037b1738a8be6efd378c1258;hpb=4d68e21b12d8887935855ac9fe3117b0ee656c6f diff --git a/time.php b/time.php index 501d89c..3c42f79 100644 --- a/time.php +++ b/time.php @@ -2,25 +2,23 @@ # Copyright (C) 2007 Jason Woofenden # -# This file is part of wfpl. -# -# wfpl is free software; you can redistribute it and/or modify it under the -# terms of the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 2.1 of the License, or (at your option) -# any later version. -# -# wfpl is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for -# more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with wfpl; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . # This file contains functions to manipulate/calculate dates/times +# FIXME make it so you can call this with a string YYYY-MM-DD function ymd_to_days($year, $month, $day) { return (int)(mktime(12,0,0,$month,$day, $year, 0) / 86400); } @@ -45,3 +43,96 @@ function days_to_weekday_name($days) { # echo ", ymd_to_days($year, $month, $day): $days\n
"; # } #} + + +# pass anything, and get a valid date +# +# returns array($year, $month, $day) +function clean_ymd($year, $month, $day) { + $year = intval($year, 10); + $month = intval($month, 10); + $day = intval($day, 10); + + if($year < 100) { + $year += 2000; + } + if($month < 1) { + $month = 1; + } elseif($month > 12) { + $month = 12; + } + if($day < 1) { + $day = 1; + } else { + $max = date('t', mktime(12, 0, 0, $month, 1, $year)); + if($day > $max) { + $day = $max; + } + } + + return array($year, $month, $day); +} + +# pass date like 3/21/99 +# returns array(year, month, day) +function mdy_clean($date) { + $date = ereg_replace('[^0-9/-]', '', $date); + $date = ereg_replace('-', '/', $date); + $parts = explode('/', $date); + switch(count($parts)) { + case 1: + $year = $parts[0]; + if(strlen($year) == 0) { + list($month, $day, $year) = explode('/', date('m/d/Y')); + } else { + list($month, $day) = explode('/', date('m/d')); + } + break; + case 2: + list($month, $year) = $parts; + $year = date('d'); + break; + default: + list($month, $day, $year) = $parts; + } + + 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); +} + +# pass date like 2008-11-21 +# returns array(year, month, day) +function ymd_clean($date) { + $date = ereg_replace('[^0-9/-]', '', $date); + $date = ereg_replace('/', '-', $date); + $parts = explode('-', $date); + switch(count($parts)) { + case 1: + $year = $parts[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')); + } + break; + case 2: + list($year, $month) = $parts; + $year = date('d'); + break; + default: + list($year, $month, $day) = $parts; + } + + return clean_ymd($year, $month, $day); +} + +# 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); +}