JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
metaform: merge ckeditor settings from cms
[wfpl.git] / time.php
index a3bc761..f71d22a 100644 (file)
--- 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 <http://www.gnu.org/licenses/>.
 
 
 # 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);
 }
@@ -65,18 +63,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 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:
@@ -95,20 +96,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'));
@@ -122,13 +128,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);
 }
-
-?>