<?php
-# 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 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) {
}
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 yyy-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:
$year = $parts[0];
- list($month, $day) = explode('/', date('m/d'));
+ 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;
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];
- list($month, $day) = explode('-', date('m-d'));
+ 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;
list($year, $month, $day) = $parts;
}
- list($year, $month, $day) = clean_ymd($year, $month, $day);
+ 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);
}
-
-?>