/[dtapublic]/to_be_filed/webprojs/php_libraries/php_library/fboprime/dt8.inc
ViewVC logotype

Annotation of /to_be_filed/webprojs/php_libraries/php_library/fboprime/dt8.inc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 35 - (hide annotations) (download)
Sat Oct 8 23:35:33 2016 UTC (7 years, 8 months ago) by dashley
File size: 5949 byte(s)
Initial commit.
1 dashley 35 <?php
2     //$Header: /hl/cvsroots/gpl01/gpl01/webprojs/fboprime/sw/phplib/dt8.inc,v 1.2 2006/04/14 07:54:49 dashley Exp $
3     //--------------------------------------------------------------------------------------------------------------
4     //dt8.inc--FboPrime Functions Manipulating DT8 Data Type
5     //Copyright (C) 2006 David T. Ashley
6     //
7     //This program is free software; you can redistribute it and/or
8     //modify it under the terms of the GNU General Public License
9     //as published by the Free Software Foundation; either version 2
10     //of the License, or (at your option) any later version.
11     //
12     //This program is distributed in the hope that it will be useful,
13     //but WITHOUT ANY WARRANTY; without even the implied warranty of
14     //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     //GNU General Public License for more details.
16     //
17     //You should have received a copy of the GNU General Public License
18     //along with this program; if not, write to the Free Software
19     //Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20     //********************************************************************************
21     //This contains functions that deal with the DT8 data type (calenadar dates in
22     //the form "YYYYMMDD", for example "20060415".
23     //--------------------------------------------------------------------------------------------------------------
24     require_once("config.inc");
25     require_once("confighard.inc");
26     require_once("datefunc.inc");
27     //--------------------------------------------------------------------------------------------------------------
28     //
29     //Returns (1) if the DT8 is valid, or (0) otherwise. Additionally, if valid, the components
30     //are returned as integers, otherwise the page load date is returned. Here, "valid" is defined as:
31     // a)Right type.
32     // b)Syntactically valid.
33     // c)Date is within minimums and maximums of calendaring logic.
34     // d)Date is consistent with number of months in year and number of days in affected month.
35     //
36     //Parameters:
37     // dt8 : Value to examine.
38     // valid : (Output) 1 if valid, 0 otherwise.
39     // components : (Output) Defined only if valid,
40     // [0] Year, integer.
41     // [1] Month
42     // [2] Day
43     //
44     function DT8_extract_components($dt8, &$valid, &$components)
45     {
46     global $GLOBAL_stime_year;
47     global $GLOBAL_stime_month;
48     global $GLOBAL_stime_day;
49    
50     //Define the output array to be today's date, just in case the parse fails.
51     $components = array ($GLOBAL_stime_year, $GLOBAL_stime_month, $GLOBAL_stime_day);
52    
53     //Similarly, define $valid to be 0 so that a return creates an invalid flag.
54     $valid = 0;
55    
56     if (!is_string($dt8)) //Must be right type.
57     return;
58    
59     if (strlen($dt8) != 8) //Must be right length.
60     return;
61    
62     //Extract characters.
63     $c0 = SubStr($dt8, 0, 1);
64     $c1 = SubStr($dt8, 1, 1);
65     $c2 = SubStr($dt8, 2, 1);
66     $c3 = SubStr($dt8, 3, 1);
67     $c4 = SubStr($dt8, 4, 1);
68     $c5 = SubStr($dt8, 5, 1);
69     $c6 = SubStr($dt8, 6, 1);
70     $c7 = SubStr($dt8, 7, 1);
71    
72     //Check the character sets. Conditions below are necessary but not sufficient.
73     //
74     if (strpos("2" , $c0) === FALSE) //Thousands of year must be 2.
75     return;
76     if (strpos("0" , $c1) === FALSE) //Hundreds of year must be 0.
77     return;
78     if (strpos("0123456789" , $c2) === FALSE) //Tens of year may be any digit.
79     return;
80     if (strpos("0123456789" , $c3) === FALSE) //Ones of year may be any digit.
81     return;
82     if (strpos("01" , $c4) === FALSE) //Tens of month must be 0 or 1.
83     return;
84     if (strpos("0123456789" , $c5) === FALSE) //Ones of month may be any digit.
85     return;
86     if (strpos("0123" , $c6) === FALSE) //Tens of day must be 0-3.
87     return;
88     if (strpos("0123456789" , $c7) === FALSE) //Ones of day may be any digit.
89     return;
90    
91     //Grab the values.
92     $val0 = strpos("0123456789", $c0);
93     $val1 = strpos("0123456789", $c1);
94     $val2 = strpos("0123456789", $c2);
95     $val3 = strpos("0123456789", $c3);
96     $val4 = strpos("0123456789", $c4);
97     $val5 = strpos("0123456789", $c5);
98     $val6 = strpos("0123456789", $c6);
99     $val7 = strpos("0123456789", $c7);
100    
101     //Calculate the integers representing year, month, and day.
102     $year_int = $val0 * 1000 + $val1 * 100 + $val2 * 10 + $val3;
103     $month_int = $val4 * 10 + $val5;
104     $day_int = $val6 * 10 + $val7;
105    
106     //Confine year.
107     if (($year_int < CONFIGHARD_DATEFUNC_MINYEAR) || ($year_int >= CONFIGHARD_DATEFUNC_MAXYEAR))
108     return;
109    
110     //Confine month.
111     if (($month_int < 1) || ($month_int > 12))
112     return;
113    
114     //Figure out how many days are supposed to be in that month, anyway.
115     $ndays = DATEFUNC_year_month_days($year_int, $month_int);
116    
117     //Confine days.
118     if (($day_int < 1) || ($day_int > $ndays))
119     return;
120    
121     //We have a confirmed good date. Return the info.
122     $valid = 1;
123     $components[0] = $year_int;
124     $components[1] = $month_int;
125     $components[2] = $day_int;
126     }
127     //
128     //--------------------------------------------------------------------------------------------------------------
129     //
130     //Makes a DT8 from components of integer year, integer month, and integer day.
131     //
132     function DT8_make_from_ints($year, $month, $day)
133     {
134     return(sprintf("%04d", $year) . sprintf("%02d", $month) . sprintf("%02d", $day));
135     }
136     //
137     //--------------------------------------------------------------------------------------------------------------
138     //End of $RCSfile: dt8.inc,v $.
139     //--------------------------------------------------------------------------------------------------------------
140     ?>

dashley@gmail.com
ViewVC Help
Powered by ViewVC 1.1.25