490 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			490 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 | |
| <html xmlns="http://www.w3.org/1999/xhtml">
 | |
| <head>
 | |
| <title>GT::Date - Common date parsing and manipulation routines</title>
 | |
| <link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
 | |
| 
 | |
| <style type="text/css">
 | |
| /* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
 | |
| /* $MVD$:fontset("Arial","Arial") */
 | |
| /* $MVD$:fontset("Arial Black","Arial Black") */
 | |
| /* $MVD$:fontset("Algerian","Algerian") */
 | |
| 
 | |
| 
 | |
| body {
 | |
|     background-color: white;
 | |
|     font-family: Verdana, Arial, sans-serif;
 | |
|     font-size: small;
 | |
|     color: black;
 | |
| }
 | |
| 
 | |
| 
 | |
| p {
 | |
|     background-color : white;
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| 
 | |
| h1 {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-weight : bold;
 | |
|     font-size : medium;
 | |
|     background-color : white;
 | |
|     color : maroon;
 | |
| }
 | |
| 
 | |
| 
 | |
| h2 {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : medium;
 | |
|     font-weight : bold;
 | |
|     color : blue;
 | |
|     background-color : white;
 | |
| }
 | |
| 
 | |
| 
 | |
| h3 {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-weight : bold;
 | |
|     font-size : medium;
 | |
|     color : black;
 | |
|     background-color : white;
 | |
| }
 | |
| 
 | |
| 
 | |
| h4 {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-weight : bold;
 | |
|     font-size : small;
 | |
|     color : maroon;
 | |
|     background-color : white;
 | |
| }
 | |
| 
 | |
| 
 | |
| h5 {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-weight : bold;
 | |
|     font-size : small;
 | |
|     color : blue;
 | |
|     background-color : white;
 | |
| }
 | |
| 
 | |
| 
 | |
| h6 {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-weight : bold;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
|     background-color : white;
 | |
| }
 | |
| 
 | |
| 
 | |
| ul {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| 
 | |
| ol {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| 
 | |
| dl {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| 
 | |
| li {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| 
 | |
| th {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| 
 | |
| td {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| 
 | |
| dl {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| 
 | |
| dd {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| 
 | |
| dt {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| 
 | |
| code {
 | |
|     font-family : Courier;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| 
 | |
| pre {
 | |
|     font-family : Courier;
 | |
|     font-size : small;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| .mvd-H1 {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-weight : bold;
 | |
|     font-size : 14.0pt;
 | |
|     background-color : transparent;
 | |
|     background-image : none;
 | |
|     color : maroon;
 | |
| }
 | |
| 
 | |
| 
 | |
| .mvd-H2 {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : 12.0pt;
 | |
|     color : blue;
 | |
| }
 | |
| 
 | |
| 
 | |
| p.indent {
 | |
|     font-family : "Verdana, Arial, sans-serif";
 | |
|     list-style-type : circle;
 | |
|     list-style-position : inside;
 | |
|     color : black;
 | |
|     margin-left : 16.0pt;
 | |
| }
 | |
| 
 | |
| 
 | |
| .mvd-P-indent {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     list-style-type : circle;
 | |
|     list-style-position : inside;
 | |
|     color : black;
 | |
|     margin-left : 16.0pt;
 | |
| }
 | |
| 
 | |
| 
 | |
| pre.programlisting {
 | |
|     font-size : 9.0pt;
 | |
|     list-style-type : disc;
 | |
|     margin-left : 16.0pt;
 | |
|     margin-top : -14.0pt;
 | |
| }
 | |
| 
 | |
| 
 | |
| .mvd-PRE-programlisting {
 | |
|     font-size : 9.0pt;
 | |
|     list-style-type : disc;
 | |
|     margin-left : 16.0pt;
 | |
|     margin-top : -14.0pt;
 | |
| }
 | |
| 
 | |
| 
 | |
| .mvd-PRE {
 | |
|     font-size : 9.0pt;
 | |
| }
 | |
| 
 | |
| 
 | |
| p.note {
 | |
|     margin-left : 28.0pt;
 | |
| }
 | |
| 
 | |
| 
 | |
| .mvd-P-note {
 | |
|     margin-left : 28.0pt;
 | |
| }
 | |
| 
 | |
| 
 | |
| .mvd-H4 {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-weight : normal;
 | |
|     font-size : 9.0pt;
 | |
|     color : black;
 | |
|     margin-left : 6.0pt;
 | |
|     margin-top : -14.0pt;
 | |
| }
 | |
| 
 | |
| 
 | |
| .mvd-P {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     font-size : 10.0pt;
 | |
|     color : black;
 | |
| }
 | |
| 
 | |
| .mvd-BODY {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     background-color : white;
 | |
| }
 | |
| 
 | |
| 
 | |
| p.indentnobullet {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     list-style-type : none;
 | |
| }
 | |
| 
 | |
| 
 | |
| .mvd-P-indentnobullet {
 | |
|     font-family : Verdana, Arial, sans-serif;
 | |
|     list-style-type : none;
 | |
| }
 | |
| </style>
 | |
| 
 | |
| 
 | |
| </head>
 | |
| 
 | |
| <body style="background-color: white">
 | |
| 
 | |
| <p><a name="__index__"></a></p>
 | |
| <!-- INDEX BEGIN -->
 | |
| 
 | |
| <ul>
 | |
| 
 | |
| 	<li><a href="#name">NAME</a></li>
 | |
| 	<li><a href="#synopsis">SYNOPSIS</a></li>
 | |
| 	<li><a href="#description">DESCRIPTION</a></li>
 | |
| 	<ul>
 | |
| 
 | |
| 		<li><a href="#date_is_valid">date_is_valid</a></li>
 | |
| 		<li><a href="#date_is_greater">date_is_greater</a></li>
 | |
| 		<li><a href="#date_is_smaller">date_is_smaller</a></li>
 | |
| 		<li><a href="#date_get_date_get_gm">date_get date_get_gm</a></li>
 | |
| 		<li><a href="#date_comp">date_comp</a></li>
 | |
| 		<li><a href="#date_diff">date_diff</a></li>
 | |
| 		<li><a href="#date_add_date_add_gm">date_add date_add_gm</a></li>
 | |
| 		<li><a href="#date_sub_date_sub_gm">date_sub date_sub_gm</a></li>
 | |
| 		<li><a href="#timegm">timegm</a></li>
 | |
| 		<li><a href="#timlocal">timlocal</a></li>
 | |
| 		<li><a href="#parse_format">parse_format</a></li>
 | |
| 		<li><a href="#format_date">format_date</a></li>
 | |
| 		<li><a href="#setting_date_format">Setting date format</a></li>
 | |
| 		<li><a href="#transforming_between_date_formats_">Transforming between date formats.</a></li>
 | |
| 		<li><a href="#getting_the_gm_offset_">Getting the GM offset.</a></li>
 | |
| 	</ul>
 | |
| 
 | |
| 	<li><a href="#examples">EXAMPLES</a></li>
 | |
| 	<li><a href="#copyright">COPYRIGHT</a></li>
 | |
| 	<li><a href="#version">VERSION</a></li>
 | |
| </ul>
 | |
| <!-- INDEX END -->
 | |
| 
 | |
| <hr />
 | |
| <p>
 | |
| </p>
 | |
| <h1><a name="name">NAME</a></h1>
 | |
| <p>GT::Date - Common date parsing and manipulation routines</p>
 | |
| <p>
 | |
| </p>
 | |
| <hr />
 | |
| <h1><a name="synopsis">SYNOPSIS</a></h1>
 | |
| <pre>
 | |
|     use GT::Date qw/:all/;
 | |
|     my $date = date_get();
 | |
|     my $next_week = date_add($date, 7);
 | |
|     my $is_bigger = date_is_greater($date, $next_week);</pre>
 | |
| <p>
 | |
| </p>
 | |
| <hr />
 | |
| <h1><a name="description">DESCRIPTION</a></h1>
 | |
| <p>GT::Date provides several functions useful in parsing dates, and 
 | |
| doing date manipulation. Under the hood, it uses Time::Local
 | |
| code to transform a date into seconds for comparison and 
 | |
| mathematical operations. It also uses <a href="glist.cgi?do=admin_gtdoc&topic=/GT/Cache.html">the GT::Cache manpage</a> to store
 | |
| most of the complex work.</p>
 | |
| <p>No functions are exported by default. You can either specify
 | |
| the functions you need in use, or use the tags ':all' or 
 | |
| ':timelocal'. All will give you all functions, and timelocal
 | |
| will give you functions found in Time::Local.</p>
 | |
| <p>GT::Date uses a package global $DATE_FMT which specifies
 | |
| the format that dates should be returned in. You can change this using
 | |
| the <code>date_set_format()</code> function.</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="date_is_valid">date_is_valid</a></h2>
 | |
| <p>Returns 1 if the argument passed in is a valid date. It must first
 | |
| be in the current date format, and then be a valid date.</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="date_is_greater">date_is_greater</a></h2>
 | |
| <p>Returns 1 if argument 1 is greater then argument 2, otherwise 0.</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="date_is_smaller">date_is_smaller</a></h2>
 | |
| <p>Returns 1 if argument 1 is smaller then argument 2, otherwise 0.</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="date_get_date_get_gm">date_get date_get_gm</a></h2>
 | |
| <p>Called with no arguments, returns the current date based on system
 | |
| time. You can specify the date you want by passing in the seconds
 | |
| since epoch (output of time()).</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="date_comp">date_comp</a></h2>
 | |
| <p>Equivalent to arg1 <=> arg2.</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="date_diff">date_diff</a></h2>
 | |
| <p>Returns number of days difference between arg1 - arg2.</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="date_add_date_add_gm">date_add date_add_gm</a></h2>
 | |
| <p>Returns date derived from arg1 + arg2, where the second argument 
 | |
| can be either a date or number of days.</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="date_sub_date_sub_gm">date_sub date_sub_gm</a></h2>
 | |
| <p>Returns date derived from arg1 - arg2, where the second argument 
 | |
| can be either a date or number of days.</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="timegm">timegm</a></h2>
 | |
| <p>Takes the returned array from <code>gmtime()</code> and returns a unix time
 | |
| stamp.</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="timlocal">timlocal</a></h2>
 | |
| <p>Takes the array returned by <code>localtime()</code> and returns a unix time
 | |
| stamp.</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="parse_format">parse_format</a></h2>
 | |
| <p>Takes a string and a date format and returns an array
 | |
| ref of the first 7 arguments returned by localtime().</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="format_date">format_date</a></h2>
 | |
| <p>Takes a localtime array, and a format string and returns a string
 | |
| of the parsed format.</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="setting_date_format">Setting date format</a></h2>
 | |
| <p>You can use date_set_format to change the format. You pass in a 
 | |
| format string. It is made up of:</p>
 | |
| <pre>
 | |
|     %yyyy%      four digit year as in 1999
 | |
|     %yy%        two digit year as in 99
 | |
|     %y%         two digit year without leading 0
 | |
|     %mmmm%      long month name as in January
 | |
|     %mmm%       short month name as in Jan
 | |
|     %mm%        numerical month name as in 01
 | |
|     %m%         numerical month name without leading 0 as in 1
 | |
|     %dddd%      long day name as in Sunday
 | |
|     %ddd%       short day name as in Sun
 | |
|     %dd%        numerical date
 | |
|     %d%         numerical date without leading 0
 | |
|     %HH%        two digit hour, 24 hour time
 | |
|     %H%         one or two digit hour, 24 hour time
 | |
|     %hh%        two digit hour, 12 hour time. 0 becomes 12.
 | |
|     %h%         one or two digit hour, 12 hour time. 0 becomes 12.
 | |
|     %MM%        two digit minute
 | |
|     %M%         one or two digit minute (when would someone ever WANT this?)
 | |
|     %ss%        two digit second
 | |
|     %s%         one ot two digit second (when would someone ever WANT this?)
 | |
|     %tt%        AM or PM (use with 12 hour time)
 | |
|     %o%         + or - GMT offset</pre>
 | |
| <p>Common formats include:</p>
 | |
| <pre>
 | |
|     %yyyy%-%mm%-%dd%            1999-12-25
 | |
|     %dd%-%mmm%-%yyyy%           12-Dec-1999
 | |
|     %ddd% %mmm% %dd% %yyyy%     Sat Dec 12 1999
 | |
|     %ddd% %mmm% %dd% %yyyy%     Sat Dec 12 1999</pre>
 | |
| <p>or RFC822 mime mail format:</p>
 | |
| <pre>
 | |
|      %ddd%, %dd% %mmm% %yyyy% %HH%:%MM%:%ss% %o%   Sat, 12, Dec 1999 21:32:02 -0800</pre>
 | |
| <p>or MySQL format:</p>
 | |
| <pre>
 | |
|     %yyyy%-%mm%-%dd% %HH%:%MM%:%ss%  1999-03-25 21:32:02</pre>
 | |
| <p>The language used for month names and day names can be changed with 
 | |
| date_set_month(), date_set_days(), <code>date_set_days_short()</code> and 
 | |
| date_set_month_short().</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="transforming_between_date_formats_">Transforming between date formats.</a></h2>
 | |
| <p>You can transform a date from one format to another with:</p>
 | |
| <pre>
 | |
|     date_transform ($date, $orig_fmt, $new_fmt);</pre>
 | |
| <p>where $orig_fmt and $new_fmt are date format strings described above.</p>
 | |
| <p>
 | |
| </p>
 | |
| <h2><a name="getting_the_gm_offset_">Getting the GM offset.</a></h2>
 | |
| <p>You can get the number of seconds between the system time and GM time 
 | |
| using:</p>
 | |
| <pre>
 | |
|     my $time = date_gmt_offset();</pre>
 | |
| <p>So if you are in Pacific time, it would return 25200 seconds (-0700 time zone).</p>
 | |
| <p>
 | |
| </p>
 | |
| <hr />
 | |
| <h1><a name="examples">EXAMPLES</a></h1>
 | |
| <p>Get todays date, the default format unless specified is yyyy-mm-dd.</p>
 | |
| <pre>
 | |
|     print date_get();                 2000-12-31</pre>
 | |
| <p>Get todays date in a different format:</p>
 | |
| <pre>
 | |
|     date_set_format('%ddd% %mmm% %dd% %yyyy%');
 | |
|     print date_get();                               Sat Dec 31 2000</pre>
 | |
| <p>Get the date from 1 week ago.</p>
 | |
| <pre>
 | |
|     # Long way
 | |
|     my $date1 = date_get();
 | |
|     my $date2 = date_sub($date1, 7);</pre>
 | |
| <pre>
 | |
|         or</pre>
 | |
| <pre>
 | |
|     # Can pass in unix timestamp of date we want.
 | |
|     my $date = date_get (time - (7 * 86400));</pre>
 | |
| <p>Compare two dates.</p>
 | |
| <pre>
 | |
|     my $halloween = '2000-10-31';
 | |
|     my $christmas = '2000-12-25';
 | |
|     if (date_is_smaller($halloween, $christmas)) {
 | |
|         print "Halloween comes before christmas!";
 | |
|     }
 | |
|     if (date_is_greater($christmas, $halloween)) {
 | |
|         print "Yup, christmas comes after halloween.";
 | |
|     }
 | |
|     my @dates = ($halloween, $christmas);
 | |
|     print "Dates in order: ", sort date_comp @dates;</pre>
 | |
| <p>
 | |
| </p>
 | |
| <hr />
 | |
| <h1><a name="copyright">COPYRIGHT</a></h1>
 | |
| <p>Copyright (c) 2004 Gossamer Threads Inc.  All Rights Reserved.
 | |
| <a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
 | |
| <p>
 | |
| </p>
 | |
| <hr />
 | |
| <h1><a name="version">VERSION</a></h1>
 | |
| <p>Revision: $Id: Date.pm,v 1.75 2005/04/04 22:21:23 brewt Exp $</p>
 | |
| 
 | |
| </body>
 | |
| 
 | |
| </html>
 | 
