/[cvs]/nfo/php/libs/net.php.pear/Date.php
ViewVC logotype

Contents of /nfo/php/libs/net.php.pear/Date.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Tue Oct 29 19:11:40 2002 UTC (21 years, 8 months ago) by cvsjoko
Branch: MAIN
CVS Tags: HEAD
+ new pear-libraries

1 <?php
2 //
3 // +----------------------------------------------------------------------+
4 // | PHP Version 4 |
5 // +----------------------------------------------------------------------+
6 // | Copyright (c) 1997-2002 The PHP Group |
7 // +----------------------------------------------------------------------+
8 // | This source file is subject to version 2.02 of the PHP license, |
9 // | that is bundled with this package in the file LICENSE, and is |
10 // | available at through the world-wide-web at |
11 // | http://www.php.net/license/2_02.txt. |
12 // | If you did not receive a copy of the PHP license and are unable to |
13 // | obtain it through the world-wide-web, please send a note to |
14 // | license@php.net so we can mail you a copy immediately. |
15 // +----------------------------------------------------------------------+
16 // | Authors: Baba Buehler <baba@babaz.com> |
17 // | |
18 // +----------------------------------------------------------------------+
19 //
20 // $Id: Date.php,v 1.6 2002/08/14 06:39:25 baba Exp $
21 //
22 // Date Class
23 //
24 require_once 'Date/TimeZone.php';
25 require_once 'Date/Calc.php';
26
27 /**
28 * "YYYY-MM-DD HH:MM:SS"
29 */
30 define('DATE_FORMAT_ISO', 1);
31 /**
32 * "YYYYMMDDHHMMSS"
33 */
34 define('DATE_FORMAT_TIMESTAMP', 2);
35 /**
36 * long int, seconds since the unix epoch
37 */
38 define('DATE_FORMAT_UNIXTIME', 3);
39
40 define('DATE_FORMAT_ENGLISH_SHORT', 4);
41 define('DATE_FORMAT_GERMAN_SHORT', 5);
42
43 /**
44 * Generic date handling class for PEAR.
45 *
46 * Generic date handling class for PEAR. Attempts to be time zone aware
47 * through the Date::TimeZone class. Supports several operations from
48 * Date::Calc on Date objects.
49 *
50 * @author Baba Buehler <baba@babaz.com>
51 * @package Date
52 * @access public
53 * @version 1.1
54 */
55 class Date
56 {
57 /**
58 * the year
59 * @var int
60 */
61 var $year;
62 /**
63 * the month
64 * @var int
65 */
66 var $month;
67 /**
68 * the day
69 * @var int
70 */
71 var $day;
72 /**
73 * the hour
74 * @var int
75 */
76 var $hour;
77 /**
78 * the minute
79 * @var int
80 */
81 var $minute;
82 /**
83 * the second
84 * @var int
85 */
86 var $second;
87 /**
88 * timezone for this date
89 * @var object Date_TimeZone
90 */
91 var $tz;
92
93
94 /**
95 * Constructor
96 *
97 * Creates a new Date Object
98 * initialized to the current date/time in the
99 * system default time zone by default. A date optionally
100 * passed in may be in the ISO, TIMESTAMP or UNIXTIME format,
101 * or another Date object.
102 *
103 * @access public
104 * @param mixed $date optional - date/time to initialize
105 * @return object Date the new Date object
106 */
107 function Date($date = null) {
108 $this->tz = Date_TimeZone::getDefault();
109 if (is_null($date)) {
110 $this->setDate(date('Y-m-d H:i:s'));
111 }
112 elseif (is_object($date) && (get_class($date) == 'date')) {
113 $this->copy($date);
114 }
115 elseif (preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', $date)) {
116 $this->setDate($date);
117 }
118 elseif (preg_match('/\d{14}/',$date)) {
119 $this->setDate($date,DATE_FORMAT_TIMESTAMP);
120 }
121 elseif (preg_match('/\d{4}-\d{2}-\d{2}/', $date)) { // DATE_FORMAT_ENGLISH_SHORT
122 $this->setDate($date . " " . "00:00:00");
123 }
124 elseif (preg_match('/(\d+)\.(\d+)\.(\d+)/', $date, $matches)) { // DATE_FORMAT_GERMAN_SHORT
125 $date = join("-", array($matches[3], $matches[2], $matches[1])) . " " . "00:00:00";
126 $this->setDate($date);
127 }
128 else {
129 $this->setDate($date,DATE_FORMAT_UNIXTIME);
130 }
131 }
132
133 /**
134 * Set the fields of a Date object based on the input date and format
135 *
136 * Set the fields of a Date object based on the input date and format,
137 * which is specified by the DATE_FORMAT_* constants.
138 *
139 * @access public
140 * @param string $date input date
141 * @param int $format format constant (DATE_FORMAT_*) of the input date
142 */
143 function setDate($date, $format = DATE_FORMAT_ISO)
144 {
145 switch($format) {
146 case DATE_FORMAT_ISO:
147 list($this->year, $this->month, $this->day, $this->hour, $this->minute, $this->second) =
148 sscanf($date, "%04u-%02u-%02u %02u:%02u:%02u");
149 break;
150 case DATE_FORMAT_TIMESTAMP:
151 list($this->year, $this->month, $this->day, $this->hour, $this->minute, $this->second) =
152 sscanf($date, "%04u%02u%02u%02u%02u%02u");
153 break;
154 case DATE_FORMAT_UNIXTIME:
155 $this->setDate(date("Y-m-d H:i:s", $date));
156 break;
157 }
158 }
159
160 /**
161 * Get a string (or other) representation of this date
162 *
163 * Get a string (or other) representation of this date in the
164 * format specified by the DATE_FORMAT_* constants.
165 *
166 * @access public
167 * @param int $format format constant (DATE_FORMAT_*) of the output date
168 * @return string the date in the requested format
169 */
170 function getDate($format = DATE_FORMAT_ISO)
171 {
172 switch($format) {
173 case DATE_FORMAT_ISO:
174 return $this->format("%Y-%m-%d %T");
175 break;
176 case DATE_FORMAT_TIMESTAMP:
177 return $this->format("%Y%m%d%H%M%S");
178 break;
179 case DATE_FORMAT_UNIXTIME:
180 return mktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year, 0);
181 break;
182 case DATE_FORMAT_ENGLISH_SHORT:
183 return $this->format("%Y-%m-%d");
184 break;
185 case DATE_FORMAT_GERMAN_SHORT:
186 return $this->format("%d.%m.%Y");
187 break;
188 }
189 }
190
191 /**
192 * Copy values from another Date object
193 *
194 * Makes this Date a copy of another Date object.
195 *
196 * @access public
197 * @param object Date $date Date to copy from
198 */
199 function copy($date)
200 {
201 $this->year = $date->year;
202 $this->month = $date->month;
203 $this->day = $date->day;
204 $this->hour = $date->hour;
205 $this->minute = $date->minute;
206 $this->second = $date->second;
207 $this->tz = $date->tz;
208 }
209
210 /**
211 * Date pretty printing, similar to strftime()
212 *
213 * Formats the date in the given format, much like
214 * strftime(). Most strftime() options are supported.<br><br>
215 *
216 * formatting options:<br><br>
217 *
218 * <code>%a </code> abbreviated weekday name (Sun, Mon, Tue) <br>
219 * <code>%A </code> full weekday name (Sunday, Monday, Tuesday) <br>
220 * <code>%b </code> abbreviated month name (Jan, Feb, Mar) <br>
221 * <code>%B </code> full month name (January, February, March) <br>
222 * <code>%C </code> century number (the year divided by 100 and truncated to an integer, range 00 to 99) <br>
223 * <code>%d </code> day of month (range 00 to 31) <br>
224 * <code>%D </code> same as "%m/%d/%y" <br>
225 * <code>%e </code> day of month, single digit (range 0 to 31) <br>
226 * <code>%E </code> number of days since unspecified epoch (integer, Date_Calc::dateToDays()) <br>
227 * <code>%H </code> hour as decimal number (00 to 23) <br>
228 * <code>%I </code> hour as decimal number on 12-hour clock (01 to 12) <br>
229 * <code>%j </code> day of year (range 001 to 366) <br>
230 * <code>%m </code> month as decimal number (range 01 to 12) <br>
231 * <code>%M </code> minute as a decimal number (00 to 59) <br>
232 * <code>%n </code> newline character (\n) <br>
233 * <code>%O </code> dst-corrected timezone offset expressed as "+/-HH:MM" <br>
234 * <code>%o </code> raw timezone offset expressed as "+/-HH:MM" <br>
235 * <code>%p </code> either 'am' or 'pm' depending on the time <br>
236 * <code>%P </code> either 'AM' or 'PM' depending on the time <br>
237 * <code>%r </code> time in am/pm notation, same as "%I:%M:%S %p" <br>
238 * <code>%R </code> time in 24-hour notation, same as "%H:%M" <br>
239 * <code>%S </code> seconds as a decimal number (00 to 59) <br>
240 * <code>%t </code> tab character (\t) <br>
241 * <code>%T </code> current time, same as "%H:%M:%S" <br>
242 * <code>%w </code> weekday as decimal (0 = Sunday) <br>
243 * <code>%U </code> week number of current year, first sunday as first week <br>
244 * <code>%y </code> year as decimal (range 00 to 99) <br>
245 * <code>%Y </code> year as decimal including century (range 0000 to 9999) <br>
246 * <code>%% </code> literal '%' <br>
247 * <br>
248 *
249 * @access public
250 * @param string format the format string for returned date/time
251 * @return string date/time in given format
252 */
253 function format($format)
254 {
255 $output = "";
256
257 for($strpos = 0; $strpos < strlen($format); $strpos++) {
258 $char = substr($format,$strpos,1);
259 if($char == "%") {
260 $nextchar = substr($format,$strpos + 1,1);
261 switch($nextchar) {
262 case "a":
263 $output .= Date_Calc::getWeekdayAbbrname($this->day,$this->month,$this->year);
264 break;
265 case "A":
266 $output .= Date_Calc::getWeekdayFullname($this->day,$this->month,$this->year);
267 break;
268 case "b":
269 $output .= Date_Calc::getMonthAbbrname($this->month);
270 break;
271 case "B":
272 $output .= Date_Calc::getMonthFullname($this->month);
273 break;
274 case "C":
275 $output .= sprintf("%02d",intval($this->year/100));
276 break;
277 case "d":
278 $output .= sprintf("%02d",$this->day);
279 break;
280 case "D":
281 $output .= sprintf("%02d/%02d/%02d",$this->month,$this->day,$this->year);
282 break;
283 case "e":
284 $output .= $this->day;
285 break;
286 case "E":
287 $output .= Date_Calc::dateToDays($this->day,$this->month,$this->year);
288 break;
289 case "H":
290 $output .= sprintf("%02d", $this->hour);
291 break;
292 case "I":
293 $hour = ($this->hour + 1) > 12 ? $this->hour - 12 : $this->hour;
294 $output .= sprintf("%02d", $hour==0 ? 12 : $hour);
295 break;
296 case "j":
297 $output .= Date_Calc::julianDate($this->day,$this->month,$this->year);
298 break;
299 case "m":
300 $output .= sprintf("%02d",$this->month);
301 break;
302 case "M":
303 $output .= sprintf("%02d",$this->minute);
304 break;
305 case "n":
306 $output .= "\n";
307 break;
308 case "O":
309 $offms = $this->tz->getOffset($this);
310 $direction = $offms >= 0 ? "+" : "-";
311 $offmins = abs($offms) / 1000 / 60;
312 $hours = $offmins / 60;
313 $minutes = $offmins % 60;
314 $output .= sprintf("%s%02d:%02d", $direction, $hours, $minutes);
315 break;
316 case "o":
317 $offms = $this->tz->getRawOffset($this);
318 $direction = $offms >= 0 ? "+" : "-";
319 $offmins = abs($offms) / 1000 / 60;
320 $hours = $offmins / 60;
321 $minutes = $offmins % 60;
322 $output .= sprintf("%s%02d:%02d", $direction, $hours, $minutes);
323 break;
324 case "p":
325 $output .= $this->hour >= 12 ? "pm" : "am";
326 break;
327 case "P":
328 $output .= $this->hour >= 12 ? "PM" : "AM";
329 break;
330 case "r":
331 $hour = ($this->hour + 1) > 12 ? $this->hour - 12 : $this->hour;
332 $output .= sprintf("%02d:%02d:%02d %s", $hour==0 ? 12 : $hour, $this->minute, $this->second, $this->hour >= 12 ? "PM" : "AM");
333 break;
334 case "R":
335 $output .= sprintf("%02d:%02d", $this->hour, $this->minute);
336 break;
337 case "S":
338 $output .= sprintf("%02d", $this->second);
339 break;
340 case "t":
341 $output .= "\t";
342 break;
343 case "T":
344 $output .= sprintf("%02d:%02d:%02d", $this->hour, $this->minute, $this->second);
345 break;
346 case "w":
347 $output .= Date_Calc::dayOfWeek($this->day,$this->month,$this->year);
348 break;
349 case "U":
350 $output .= Date_Calc::weekOfYear($this->day,$this->month,$this->year);
351 break;
352 case "y":
353 $output .= substr($this->year,2,2);
354 break;
355 case "Y":
356 $output .= $this->year;
357 break;
358 case "Z":
359 $output .= $this->tz->inDaylightTime($this) ? $this->tz->getDSTShortName() : $this->tz->getShortName();
360 break;
361 case "%":
362 $output .= "%";
363 break;
364 default:
365 $output .= $char.$nextchar;
366 }
367 $strpos++;
368 }
369 else {
370 $output .= $char;
371 }
372 }
373 return $output;
374
375 }
376
377 /**
378 * Get this date/time in Unix time() format
379 *
380 * Get a representation of this date in Unix time() format. This may only be
381 * valid for dates from 1970 to ~2038.
382 *
383 * @access public
384 * @return int number of seconds since the unix epoch
385 */
386 function getTime()
387 {
388 return $this->getDate(DATE_FORMAT_UNIXTIME);
389 }
390
391 /**
392 * Sets the time zone of this Date
393 *
394 * Sets the time zone of this date with the given
395 * Date_TimeZone object. Does not alter the date/time,
396 * only assigns a new time zone. For conversion, use
397 * convertTZ().
398 *
399 * @access public
400 * @param object Date_TimeZone $tz the Date_TimeZone object to use
401 */
402 function setTZ($tz)
403 {
404 $this->tz = $tz;
405 }
406
407 /**
408 * Sets the time zone of this date with the given time zone id
409 *
410 * Sets the time zone of this date with the given
411 * time zone id, or to the system default if the
412 * given id is invalid. Does not alter the date/time,
413 * only assigns a new time zone. For conversion, use
414 * convertTZ().
415 *
416 * @access public
417 * @param string id a time zone id
418 */
419 function setTZbyID($id)
420 {
421 if(Date_TimeZone::isValidID($id)) {
422 $this->tz = new Date_TimeZone($id);
423 } else {
424 $this->tz = Date_TimeZone::getDefault();
425 }
426 }
427
428 /**
429 * Tests if this date/time is in DST
430 *
431 * Returns true if daylight savings time is in effect for
432 * this date in this date's time zone. See Date_TimeZone::inDaylightTime()
433 * for compatability information.
434 *
435 * @access public
436 * @return boolean true if DST is in effect for this date
437 */
438 function inDaylightTime()
439 {
440 return $this->tz->inDaylightTime($this);
441 }
442
443 /**
444 * Converts this date to UTC and sets this date's timezone to UTC
445 *
446 * Converts this date to UTC and sets this date's timezone to UTC
447 *
448 * @access public
449 */
450 function toUTC()
451 {
452 if($this->tz->getOffset($this) > 0) {
453 $this->subtractSeconds(intval($this->tz->getOffset($this) / 1000));
454 } else {
455 $this->addSeconds(intval(abs($this->tz->getOffset($this)) / 1000));
456 }
457 $this->tz = new Date_TimeZone('UTC');
458 }
459
460 /**
461 * Converts this date to a new time zone
462 *
463 * Converts this date to a new time zone.
464 * WARNING: This may not work correctly if your system does not allow
465 * putenv() or if localtime() does not work in your environment. See
466 * Date::TimeZone::inDaylightTime() for more information.
467 *
468 * @access public
469 * @param object Date_TimeZone $tz the Date::TimeZone object for the conversion time zone
470 */
471 function convertTZ($tz)
472 {
473 // convert to UTC
474 if($this->tz->getOffset($this) > 0) {
475 $this->subtractSeconds(intval(abs($this->tz->getOffset($this)) / 1000));
476 } else {
477 $this->addSeconds(intval(abs($this->tz->getOffset($this)) / 1000));
478 }
479 // convert UTC to new timezone
480 if($tz->getOffset($this) > 0) {
481 $this->addSeconds(intval(abs($tz->getOffset($this)) / 1000));
482 } else {
483 $this->subtractSeconds(intval(abs($tz->getOffset($this)) / 1000));
484 }
485 $this->tz = $tz;
486 }
487
488 /**
489 * Converts this date to a new time zone, given a valid time zone ID
490 *
491 * Converts this date to a new time zone, given a valid time zone ID
492 * WARNING: This may not work correctly if your system does not allow
493 * putenv() or if localtime() does not work in your environment. See
494 * Date::TimeZone::inDaylightTime() for more information.
495 *
496 * @access public
497 * @param string id a time zone id
498 */
499 function convertTZbyID($id)
500 {
501 if(Date_TimeZone::isValidID($id)) {
502 $tz = new Date_TimeZone($id);
503 } else {
504 $tz = Date_TimeZone::getDefault();
505 }
506 $this->convertTZ($tz);
507 }
508
509 /**
510 * Adds a given number of seconds to the date
511 *
512 * Adds a given number of seconds to the date
513 *
514 * @access public
515 * @param int $sec the number of seconds to add
516 */
517 function addSeconds($sec)
518 {
519 $days = intval($sec/86400);
520 $sec -= $days*86400;
521 $hours = intval($sec/3600);
522 $sec -= $hours*3600;
523 $minutes = intval($sec/60);
524 $sec -= $minutes*60;
525
526 $this->second += $sec;
527 if($this->second >= 60) {
528 $this->minute++;
529 $this->second -= 60;
530 }
531
532 $this->minute += $minutes;
533 if($this->minute >= 60) {
534 $this->hour++;
535 if($this->hour >= 24) {
536 list($this->year, $this->month, $this->day) =
537 sscanf(Date_Calc::nextDay($this->day, $this->month, $this->year), "%04s%02s%02s");
538 $this->hour -= 24;
539 }
540 $this->minute -= 60;
541 }
542
543 $this->hour += $hours;
544 if($this->hour >= 24) {
545 list($this->year, $this->month, $this->day) =
546 sscanf(Date_Calc::nextDay($this->day, $this->month, $this->year), "%04s%02s%02s");
547 $this->hour -= 24;
548 }
549
550 $d = Date_Calc::dateToDays($this->day, $this->month, $this->year);
551 $d += $days;
552
553 list($this->year, $this->month, $this->day) =
554 sscanf(Date_Calc::daysToDate($d), "%04s%02s%02s");
555 }
556
557 /**
558 * Subtracts a given number of seconds from the date
559 *
560 * Subtracts a given number of seconds from the date
561 *
562 * @access public
563 * @param int $sec the number of seconds to subtract
564 */
565 function subtractSeconds($sec)
566 {
567 $days = intval($sec/86400);
568 $sec -= $days*86400;
569 $hours = intval($sec/3600);
570 $sec -= $hours*3600;
571 $minutes = intval($sec/60);
572 $sec -= $minutes*60;
573
574 $this->second -= $sec;
575 if($this->second < 0) {
576 $this->minute--;
577 $this->second += 60;
578 }
579
580 $this->minute -= $minutes;
581 if($this->minute < 0) {
582 $this->hour--;
583 if($this->hour < 0) {
584 list($this->year, $this->month, $this->day) =
585 sscanf(Date_Calc::prevDay($this->day, $this->month, $this->year), "%04s%02s%02s");
586 $this->hour += 24;
587 }
588 $this->minute += 60;
589 }
590
591 $this->hour -= $hours;
592 if($this->hour < 0) {
593 list($this->year, $this->month, $this->day) =
594 sscanf(Date_Calc::prevDay($this->day, $this->month, $this->year), "%04s%02s%02s");
595 $this->hour += 24;
596 }
597
598 $d = Date_Calc::dateToDays($this->day, $this->month, $this->year);
599 $d -= $days;
600
601 list($this->year, $this->month, $this->day) =
602 sscanf(Date_Calc::daysToDate($d), "%04s%02s%02s");
603 }
604
605 /**
606 * Compares two dates
607 *
608 * Compares two dates. Suitable for use
609 * in sorting functions.
610 *
611 * @access public
612 * @param object Date $d1 the first date
613 * @param object Date $d2 the second date
614 * @return int 0 if the dates are equal, -1 if d1 is before d2, 1 if d1 is after d2
615 */
616 function compare($d1, $d2)
617 {
618 $d1->convertTZ(new Date_TimeZone('UTC'));
619 $d2->convertTZ(new Date_TimeZone('UTC'));
620 $days1 = Date_Calc::dateToDays($d1->day, $d1->month, $d1->year);
621 $days2 = Date_Calc::dateToDays($d2->day, $d2->month, $d2->year);
622 if($days1 < $days2) return -1;
623 if($days1 > $days2) return 1;
624 if($d1->hour < $d2->hour) return -1;
625 if($d1->hour > $d2->hour) return 1;
626 if($d1->minute < $d2->minute) return -1;
627 if($d1->minute > $d2->minute) return 1;
628 if($d1->second < $d2->second) return -1;
629 if($d1->second > $d2->second) return 1;
630 return 0;
631 }
632
633 /**
634 * Test if this date/time is before a certian date/time
635 *
636 * Test if this date/time is before a certian date/time
637 *
638 * @access public
639 * @param object Date $when the date to test against
640 * @return boolean true if this date is before $when
641 */
642 function before($when)
643 {
644 if(Date::compare($this,$when) == -1) return true;
645 else return false;
646 }
647
648 /**
649 * Test if this date/time is after a certian date/time
650 *
651 * Test if this date/time is after a certian date/time
652 *
653 * @access public
654 * @param object Date $when the date to test against
655 * @return boolean true if this date is after $when
656 */
657 function after($when)
658 {
659 if(Date::compare($this,$when) == 1) return true;
660 else return false;
661 }
662
663 /**
664 * Test if this date/time is exactly equal to a certian date/time
665 *
666 * Test if this date/time is exactly equal to a certian date/time
667 *
668 * @access public
669 * @param object Date $when the date to test against
670 * @return boolean true if this date is exactly equal to $when
671 */
672 function equals($when)
673 {
674 if(Date::compare($this,$when) == 0) return true;
675 else return false;
676 }
677
678 /**
679 * Determine if this date is in the future
680 *
681 * Determine if this date is in the future
682 *
683 * @access public
684 * @return boolean true if this date is in the future
685 */
686 function isFuture()
687 {
688 $now = new Date();
689 if($this->after($now)) return true;
690 else return false;
691 }
692
693 /**
694 * Determine if this date is in the past
695 *
696 * Determine if this date is in the past
697 *
698 * @access public
699 * @return boolean true if this date is in the past
700 */
701 function isPast()
702 {
703 $now = new Date();
704 if($this->before($now)) return true;
705 else return false;
706 }
707
708 /**
709 * Determine if the year in this date is a leap year
710 *
711 * Determine if the year in this date is a leap year
712 *
713 * @access public
714 * @return boolean true if this year is a leap year
715 */
716 function isLeapYear()
717 {
718 return Date_Calc::isLeapYear($this->year);
719 }
720
721 /**
722 * Get the Julian date for this date
723 *
724 * Get the Julian date for this date
725 *
726 * @access public
727 * @return int the Julian date
728 */
729 function getJulianDate()
730 {
731 return Date_Calc::julianDate($this->day, $this->month, $this->year);
732 }
733
734 /**
735 * Gets the day of the week for this date
736 *
737 * Gets the day of the week for this date (0=Sunday)
738 *
739 * @access public
740 * @return int the day of the week (0=Sunday)
741 */
742 function getDayOfWeek()
743 {
744 return Date_Calc::dayOfWeek($this->day, $this->month, $this->year);
745 }
746
747 /**
748 * Gets the week of the year for this date
749 *
750 * Gets the week of the year for this date
751 *
752 * @access public
753 * @return int the week of the year
754 */
755 function getWeekOfYear()
756 {
757 return Date_Calc::weekOfYear($this->day, $this->month, $this->year);
758 }
759
760 /**
761 * Gets the quarter of the year for this date
762 *
763 * Gets the quarter of the year for this date
764 *
765 * @access public
766 * @return int the quarter of the year (1-4)
767 */
768 function getQuarterOfYear()
769 {
770 return Date_Calc::quarterOfYear($this->day, $this->month, $this->year);
771 }
772
773 /**
774 * Gets number of days in the month for this date
775 *
776 * Gets number of days in the month for this date
777 *
778 * @access public
779 * @return int number of days in this month
780 */
781 function getDaysInMonth()
782 {
783 return Date_Calc::daysInMonth($this->month, $this->year);
784 }
785
786 /**
787 * Gets the number of weeks in the month for this date
788 *
789 * Gets the number of weeks in the month for this date
790 *
791 * @access public
792 * @return int number of weeks in this month
793 */
794 function getWeeksInMonth()
795 {
796 return Date_Calc::weeksInMonth($this->month, $this->year);
797 }
798
799 /**
800 * Gets the full name or abbriviated name of this weekday
801 *
802 * Gets the full name or abbriviated name of this weekday
803 *
804 * @access public
805 * @param boolean $abbr abbrivate the name
806 * @return string name of this day
807 */
808 function getDayName($abbr = false)
809 {
810 if($abbr)
811 return Date_Calc::getWeekdayAbbrname($this->day, $this->month, $this->year);
812 else
813 return Date_Calc::getWeekdayFullname($this->day, $this->month, $this->year);
814 }
815
816 /**
817 * Gets the full name or abbriviated name of this month
818 *
819 * Gets the full name or abbriviated name of this month
820 *
821 * @access public
822 * @param boolean $abbr abbrivate the name
823 * @return string name of this month
824 */
825 function getMonthName($abbr = false)
826 {
827 if($abbr)
828 return Date_Calc::getMonthAbbrname($this->month);
829 else
830 return Date_Calc::getMonthFullname($this->month);
831 }
832
833 /**
834 * Get a Date object for the day after this one
835 *
836 * Get a Date object for the day after this one.
837 * The time of the returned Date object is the same as this time.
838 *
839 * @access public
840 * @return object Date Date representing the next day
841 */
842 function getNextDay()
843 {
844 $day = Date_Calc::nextDay($this->day, $this->month, $this->year, "%Y-%m-%d");
845 $date = sprintf("%s %02d:%02d:%02d", $day, $this->hour, $this->minute, $this->second);
846 $newDate = new Date();
847 $newDate->setDate($date);
848 return $newDate;
849 }
850
851 /**
852 * Get a Date object for the day before this one
853 *
854 * Get a Date object for the day before this one.
855 * The time of the returned Date object is the same as this time.
856 *
857 * @access public
858 * @return object Date Date representing the previous day
859 */
860 function getPrevDay()
861 {
862 $day = Date_Calc::prevDay($this->day, $this->month, $this->year, "%Y-%m-%d");
863 $date = sprintf("%s %02d:%02d:%02d", $day, $this->hour, $this->minute, $this->second);
864 $newDate = new Date();
865 $newDate->setDate($date);
866 return $newDate;
867 }
868
869 /**
870 * Get a Date object for the weekday after this one
871 *
872 * Get a Date object for the weekday after this one.
873 * The time of the returned Date object is the same as this time.
874 *
875 * @access public
876 * @return object Date Date representing the next weekday
877 */
878 function getNextWeekday()
879 {
880 $day = Date_Calc::nextWeekday($this->day, $this->month, $this->year, "%Y-%m-%d");
881 $date = sprintf("%s %02d:%02d:%02d", $day, $this->hour, $this->minute, $this->second);
882 $newDate = new Date();
883 $newDate->setDate($date);
884 return $newDate;
885 }
886
887 /**
888 * Get a Date object for the weekday before this one
889 *
890 * Get a Date object for the weekday before this one.
891 * The time of the returned Date object is the same as this time.
892 *
893 * @access public
894 * @return object Date Date representing the previous weekday
895 */
896 function getPrevWeekday()
897 {
898 $day = Date_Calc::prevWeekday($this->day, $this->month, $this->year, "%Y-%m-%d");
899 $date = sprintf("%s %02d:%02d:%02d", $day, $this->hour, $this->minute, $this->second);
900 $newDate = new Date();
901 $newDate->setDate($date);
902 return $newDate;
903 }
904
905
906 /**
907 * Returns the year field of the date object
908 *
909 * Returns the year field of the date object
910 *
911 * @access public
912 * @return int the year
913 */
914 function getYear()
915 {
916 return $this->year;
917 }
918
919 /**
920 * Returns the month field of the date object
921 *
922 * Returns the month field of the date object
923 *
924 * @access public
925 * @return int the month
926 */
927 function getMonth()
928 {
929 return $this->month;
930 }
931
932 /**
933 * Returns the day field of the date object
934 *
935 * Returns the day field of the date object
936 *
937 * @access public
938 * @return int the day
939 */
940 function getDay()
941 {
942 return $this->day;
943 }
944
945 /**
946 * Returns the hour field of the date object
947 *
948 * Returns the hour field of the date object
949 *
950 * @access public
951 * @return int the hour
952 */
953 function getHour()
954 {
955 return $this->hour;
956 }
957
958 /**
959 * Returns the minute field of the date object
960 *
961 * Returns the minute field of the date object
962 *
963 * @access public
964 * @return int the minute
965 */
966 function getMinute()
967 {
968 return $this->minute;
969 }
970
971 /**
972 * Returns the second field of the date object
973 *
974 * Returns the second field of the date object
975 *
976 * @access public
977 * @return int the second
978 */
979 function getSecond()
980 {
981 return $this->second;
982 }
983
984 /**
985 * Set the year field of the date object
986 *
987 * Set the year field of the date object, invalid years (not 0-9999) are set to 0.
988 *
989 * @access public
990 * @param int $y the year
991 */
992 function setYear($y)
993 {
994 if($y < 0 || $y > 9999) {
995 $this->year = 0;
996 } else {
997 $this->year = $y;
998 }
999 }
1000
1001 /**
1002 * Set the month field of the date object
1003 *
1004 * Set the month field of the date object, invalid months (not 1-12) are set to 1.
1005 *
1006 * @access public
1007 * @param int $m the month
1008 */
1009 function setMonth($m)
1010 {
1011 if($m < 1 || $m > 12) {
1012 $this->month = 1;
1013 } else {
1014 $this->month = $m;
1015 }
1016 }
1017
1018 /**
1019 * Set the day field of the date object
1020 *
1021 * Set the day field of the date object, invalid days (not 1-31) are set to 1.
1022 *
1023 * @access public
1024 * @param int $d the day
1025 */
1026 function setDay($d)
1027 {
1028 if($d > 31 || $d < 1) {
1029 $this->day = 1;
1030 } else {
1031 $this->day = $d;
1032 }
1033 }
1034
1035 /**
1036 * Set the hour field of the date object
1037 *
1038 * Set the hour field of the date object in 24-hour format.
1039 * Invalid hours (not 0-23) are set to 0.
1040 *
1041 * @access public
1042 * @param int $h the hour
1043 */
1044 function setHour($h)
1045 {
1046 if($h > 23 || $h < 0) {
1047 $this->hour = 0;
1048 } else {
1049 $this->hour = $h;
1050 }
1051 }
1052
1053 /**
1054 * Set the minute field of the date object
1055 *
1056 * Set the minute field of the date object, invalid minutes (not 0-59) are set to 0.
1057 *
1058 * @access public
1059 * @param int $m the minute
1060 */
1061 function setMinute($m)
1062 {
1063 if($m > 59 || $m < 0) {
1064 $this->minute = 0;
1065 } else {
1066 $this->minute = $m;
1067 }
1068 }
1069
1070 /**
1071 * Set the second field of the date object
1072 *
1073 * Set the second field of the date object, invalid seconds (not 0-59) are set to 0.
1074 *
1075 * @access public
1076 * @param int $s the second
1077 */
1078 function setSecond($s) {
1079 if($s > 59 || $s < 0) {
1080 $this->second = 0;
1081 } else {
1082 $this->second = $s;
1083 }
1084 }
1085
1086 } // Date
1087
1088
1089 //
1090 // END
1091 ?>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed