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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 35 - (show annotations) (download)
Sat Oct 8 23:35:33 2016 UTC (6 years, 3 months ago) by dashley
File size: 5949 byte(s)
Initial commit.
1 <?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