JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Fix db_get_value after mysql->mysqli upgrade
[wfpl.git] / time.php
index 501d89c..9aa479d 100644 (file)
--- a/time.php
+++ b/time.php
@@ -1,28 +1,20 @@
 <?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) {
@@ -45,3 +37,96 @@ function days_to_weekday_name($days) {
 #              echo ", ymd_to_days($year, $month, $day): $days\n<br>";
 #      }
 #}
+
+
+# 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 = preg_replace('|[^0-9/-]|', '', $date);
+       $date = preg_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 = preg_replace('|[^0-9/-]|', '', $date);
+       $date = preg_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);
+}