blob: 378ff362bd5cff7c2f53c5e85bf1725a98ac8b6a [file] [log] [blame]
Derek Jones8ede1a22011-10-05 13:34:52 -05001###########
2Date Helper
3###########
4
5The Date Helper file contains functions that help you work with dates.
6
7.. contents:: Page Contents
8
9Loading this Helper
10===================
11
12This helper is loaded using the following code
13
14::
15
16 $this->load->helper('date');
17
18The following functions are available:
19
20now()
21=====
22
23Returns the current time as a Unix timestamp, referenced either to your
24server's local time or GMT, based on the "time reference" setting in
25your config file. If you do not intend to set your master time reference
26to GMT (which you'll typically do if you run a site that lets each user
27set their own timezone settings) there is no benefit to using this
28function over PHP's time() function.
29
30.. php:method:: now()
31
32mdate()
33=======
34
35This function is identical to PHPs `date() <http://www.php.net/date>`_
36function, except that it lets you use MySQL style date codes, where each
37code letter is preceded with a percent sign: %Y %m %d etc.
38
39The benefit of doing dates this way is that you don't have to worry
40about escaping any characters that are not date codes, as you would
41normally have to do with the date() function. Example
42
43.. php:method:: mdate($datestr = '', $time = '')
44
45 :param string $datestr: Date String
46 :param integer $time: time
47 :returns: integer
48
49
50::
51
52 $datestring = "Year: %Y Month: %m Day: %d - %h:%i %a";
53 $time = time();
54 echo mdate($datestring, $time);
55
56If a timestamp is not included in the second parameter the current time
57will be used.
58
59standard_date()
60===============
61
62Lets you generate a date string in one of several standardized formats.
63Example
64
65.. php:method:: standard_date($fmt = 'DATE_RFC822', $time = '')
66
67 :param string $fmt: the chosen format
68 :param string $time: Unix timestamp
69 :returns: string
70
71::
72
73 $format = 'DATE_RFC822';
74 $time = time();
75 echo standard_date($format, $time);
76
77The first parameter must contain the format, the second parameter must
78contain the date as a Unix timestamp.
79
80Supported formats:
81
82+----------------+------------------------+-----------------------------------+
83| Constant | Description | Example |
84+================+========================+===================================+
85| DATE_ATOM | Atom | 2005-08-15T16:13:03+0000 |
86+----------------+------------------------+-----------------------------------+
87| DATE_COOKIE | HTTP Cookies | Sun, 14 Aug 2005 16:13:03 UTC |
88+----------------+------------------------+-----------------------------------+
89| DATE_ISO8601 | ISO-8601 | 2005-08-14T16:13:03+00:00 |
90+----------------+------------------------+-----------------------------------+
91| DATE_RFC822 | RFC 822 | Sun, 14 Aug 05 16:13:03 UTC |
92+----------------+------------------------+-----------------------------------+
93| DATE_RFC850 | RFC 850 | Sunday, 14-Aug-05 16:13:03 UTC |
94+----------------+------------------------+-----------------------------------+
95| DATE_RFC1036 | RFC 1036 | Sunday, 14-Aug-05 16:13:03 UTC |
96+----------------+------------------------+-----------------------------------+
97| DATE_RFC1123 | RFC 1123 | Sun, 14 Aug 2005 16:13:03 UTC |
98+----------------+------------------------+-----------------------------------+
99| DATE_RFC2822 | RFC 2822 | Sun, 14 Aug 2005 16:13:03 +0000 |
100+----------------+------------------------+-----------------------------------+
101| DATE_RSS | RSS | Sun, 14 Aug 2005 16:13:03 UTC |
102+----------------+------------------------+-----------------------------------+
103| DATE_W3C | W3C | 2005-08-14T16:13:03+0000 |
104+----------------+------------------------+-----------------------------------+
105
106
107local_to_gmt()
108==============
109
110Takes a Unix timestamp as input and returns it as GMT.
111
112.. php:method:: local_to_gmt($time = '')
113
114 :param integer $time: Unix timestamp
115 :returns: string
116
117Example:
118
119::
120
121 $now = time();
122 $gmt = local_to_gmt($now);
123
124gmt_to_local()
125==============
126
127Takes a Unix timestamp (referenced to GMT) as input, and converts it to
128a localized timestamp based on the timezone and Daylight Saving time
129submitted.
130
131.. php:method:: gmt_to_local($time = '', $timezone = 'UTC', $dst = FALSE)
132
133 :param integer $time: Unix timestamp
134 :param string $timezone: timezone
135 :param boolean $dst: whether DST is active
136 :returns: integer
137
138Example
139
140::
141
142 $timestamp = '1140153693';
143 $timezone = 'UM8';
144 $daylight_saving = TRUE;
145 echo gmt_to_local($timestamp, $timezone, $daylight_saving);
146
147
148.. note:: For a list of timezones see the reference at the bottom of this page.
149
150
151mysql_to_unix()
152===============
153
154Takes a MySQL Timestamp as input and returns it as Unix.
155
156.. php:method:: mysql_to_unix($time = '')
157
158 :param integer $time: Unix timestamp
159 :returns: integer
160
161Example
162
163::
164
165 $mysql = '20061124092345'; $unix = mysql_to_unix($mysql);
166
167unix_to_human()
168===============
169
170Takes a Unix timestamp as input and returns it in a human readable
171format with this prototype
172
173.. php:method:: unix_to_human($time = '', $seconds = FALSE, $fmt = 'us')
174
175 :param integer $time: Unix timestamp
176 :param boolean $seconds: whether to show seconds
177 :param string $fmt: format: us or euro
178 :returns: integer
179
180Example
181
182::
183
184 YYYY-MM-DD HH:MM:SS AM/PM
185
186This can be useful if you need to display a date in a form field for
187submission.
188
189The time can be formatted with or without seconds, and it can be set to
190European or US format. If only the timestamp is submitted it will return
191the time without seconds formatted for the U.S. Examples
192
193::
194
195 $now = time();
196 echo unix_to_human($now); // U.S. time, no seconds
197 echo unix_to_human($now, TRUE, 'us'); // U.S. time with seconds
198 echo unix_to_human($now, TRUE, 'eu'); // Euro time with seconds
199
200human_to_unix()
201===============
202
203The opposite of the above function. Takes a "human" time as input and
204returns it as Unix. This function is useful if you accept "human"
205formatted dates submitted via a form. Returns FALSE (boolean) if the
206date string passed to it is not formatted as indicated above.
207
208.. php:method:: human_to_unix($datestr = '')
209
210 :param integer $datestr: Date String
211 :returns: integer
212
213Example:
214
215::
216
217 $now = time();
218 $human = unix_to_human($now);
219 $unix = human_to_unix($human);
220
221nice_date()
222===========
223
224This function can take a number poorly-formed date formats and convert
225them into something useful. It also accepts well-formed dates.
226
227The function will return a Unix timestamp by default. You can,
228optionally, pass a format string (the same type as the PHP date function
229accepts) as the second parameter.
230
231.. php:method:: nice_date($bad_date = '', $format = FALSE)
232
233 :param integer $bad_date: The terribly formatted date-like string
234 :param string $format: Date format to return (same as php date function)
235 :returns: string
236
237Example
238
239::
240
241 $bad_time = 199605 // Should Produce: 1996-05-01
242 $better_time = nice_date($bad_time,'Y-m-d');
243 $bad_time = 9-11-2001 // Should Produce: 2001-09-11
244 $better_time = nice_date($human,'Y-m-d');
245
246timespan()
247==========
248
249Formats a unix timestamp so that is appears similar to this
250
251::
252
253 1 Year, 10 Months, 2 Weeks, 5 Days, 10 Hours, 16 Minutes
254
255The first parameter must contain a Unix timestamp. The second parameter
256must contain a timestamp that is greater that the first timestamp. If
257the second parameter empty, the current time will be used. The most
258common purpose for this function is to show how much time has elapsed
259from some point in time in the past to now.
260
261.. php:method:: timespan($seconds = 1, $time = '')
262
263 :param integer $seconds: a number of seconds
264 :param string $time: Unix timestamp
265 :returns: string
266
267Example
268
269::
270
271 $post_date = '1079621429';
272 $now = time();
273 echo timespan($post_date, $now);
274
275.. note:: The text generated by this function is found in the following language
276 file: language/<your_lang>/date_lang.php
277
278days_in_month()
279===============
280
281Returns the number of days in a given month/year. Takes leap years into
282account.
283
284.. php:method:: days_in_month($month = 0, $year = '')
285
286 :param integer $month: a numeric month
287 :param integer $year: a numeric year
288 :returns: integer
289
290Example
291
292::
293
294 echo days_in_month(06, 2005);
295
296If the second parameter is empty, the current year will be used.
297
298timezones()
299===========
300
301Takes a timezone reference (for a list of valid timezones, see the
302"Timezone Reference" below) and returns the number of hours offset from
303UTC.
304
305.. php:method:: timezones($tz = '')
306
307 :param string $tz: a numeric timezone
308 :returns: string
309
310Example
311
312::
313
314 echo timezones('UM5');
315
316
317This function is useful when used with `timezone_menu()`.
318
319timezone_menu()
320===============
321
322Generates a pull-down menu of timezones, like this one:
323
324
325.. raw:: html
326
327 <form action="#">
328 <select name="timezones">
329 <option value='UM12'>(UTC - 12:00) Enitwetok, Kwajalien</option>
330 <option value='UM11'>(UTC - 11:00) Nome, Midway Island, Samoa</option>
331 <option value='UM10'>(UTC - 10:00) Hawaii</option>
332 <option value='UM9'>(UTC - 9:00) Alaska</option>
333 <option value='UM8'>(UTC - 8:00) Pacific Time</option>
334 <option value='UM7'>(UTC - 7:00) Mountain Time</option>
335 <option value='UM6'>(UTC - 6:00) Central Time, Mexico City</option>
336 <option value='UM5'>(UTC - 5:00) Eastern Time, Bogota, Lima, Quito</option>
337 <option value='UM4'>(UTC - 4:00) Atlantic Time, Caracas, La Paz</option>
338 <option value='UM25'>(UTC - 3:30) Newfoundland</option>
339 <option value='UM3'>(UTC - 3:00) Brazil, Buenos Aires, Georgetown, Falkland Is.</option>
340 <option value='UM2'>(UTC - 2:00) Mid-Atlantic, Ascention Is., St Helena</option>
341 <option value='UM1'>(UTC - 1:00) Azores, Cape Verde Islands</option>
342 <option value='UTC' selected='selected'>(UTC) Casablanca, Dublin, Edinburgh, London, Lisbon, Monrovia</option>
343 <option value='UP1'>(UTC + 1:00) Berlin, Brussels, Copenhagen, Madrid, Paris, Rome</option>
344 <option value='UP2'>(UTC + 2:00) Kaliningrad, South Africa, Warsaw</option>
345 <option value='UP3'>(UTC + 3:00) Baghdad, Riyadh, Moscow, Nairobi</option>
346 <option value='UP25'>(UTC + 3:30) Tehran</option>
347 <option value='UP4'>(UTC + 4:00) Adu Dhabi, Baku, Muscat, Tbilisi</option>
348 <option value='UP35'>(UTC + 4:30) Kabul</option>
349 <option value='UP5'>(UTC + 5:00) Islamabad, Karachi, Tashkent</option>
350 <option value='UP45'>(UTC + 5:30) Bombay, Calcutta, Madras, New Delhi</option>
351 <option value='UP6'>(UTC + 6:00) Almaty, Colomba, Dhaka</option>
352 <option value='UP7'>(UTC + 7:00) Bangkok, Hanoi, Jakarta</option>
353 <option value='UP8'>(UTC + 8:00) Beijing, Hong Kong, Perth, Singapore, Taipei</option>
354 <option value='UP9'>(UTC + 9:00) Osaka, Sapporo, Seoul, Tokyo, Yakutsk</option>
355 <option value='UP85'>(UTC + 9:30) Adelaide, Darwin</option>
356 <option value='UP10'>(UTC + 10:00) Melbourne, Papua New Guinea, Sydney, Vladivostok</option>
357 <option value='UP11'>(UTC + 11:00) Magadan, New Caledonia, Solomon Islands</option>
358 <option value='UP12'>(UTC + 12:00) Auckland, Wellington, Fiji, Marshall Island</option>
359 </select>
360 </form>
361
362
363This menu is useful if you run a membership site in which your users are
364allowed to set their local timezone value.
365
366The first parameter lets you set the "selected" state of the menu. For
367example, to set Pacific time as the default you will do this
368
369.. php:method:: timezone_menu($default = 'UTC', $class = "", $name = 'timezones')
370
371 :param string $default: timezone
372 :param string $class: classname
373 :param string $name: menu name
374 :returns: string
375
376Example:
377
378::
379
380 echo timezone_menu('UM8');
381
382Please see the timezone reference below to see the values of this menu.
383
384The second parameter lets you set a CSS class name for the menu.
385
386.. note:: The text contained in the menu is found in the following
387 language file: `language/<your_lang>/date_lang.php`
388
389
390Timezone Reference
391==================
392
393The following table indicates each timezone and its location.
394
395+------------+----------------------------------------------------------------+
396| Time Zone | Location |
397+============+================================================================+
398| UM12 | (UTC - 12:00) Enitwetok, Kwajalien |
399+------------+----------------------------------------------------------------+
400| UM11 | (UTC - 11:00) Nome, Midway Island, Samoa |
401+------------+----------------------------------------------------------------+
402| UM10 | (UTC - 10:00) Hawaii |
403+------------+----------------------------------------------------------------+
404| UM9 | (UTC - 9:00) Alaska |
405+------------+----------------------------------------------------------------+
406| UM8 | (UTC - 8:00) Pacific Time |
407+------------+----------------------------------------------------------------+
408| UM7 | (UTC - 7:00) Mountain Time |
409+------------+----------------------------------------------------------------+
410| UM6 | (UTC - 6:00) Central Time, Mexico City |
411+------------+----------------------------------------------------------------+
412| UM5 | (UTC - 5:00) Eastern Time, Bogota, Lima, Quito |
413+------------+----------------------------------------------------------------+
414| UM4 | (UTC - 4:00) Atlantic Time, Caracas, La Paz |
415+------------+----------------------------------------------------------------+
416| UM25 | (UTC - 3:30) Newfoundland |
417+------------+----------------------------------------------------------------+
418| UM3 | (UTC - 3:00) Brazil, Buenos Aires, Georgetown, Falkland Is. |
419+------------+----------------------------------------------------------------+
420| UM2 | (UTC - 2:00) Mid-Atlantic, Ascention Is., St Helena |
421+------------+----------------------------------------------------------------+
422| UM1 | (UTC - 1:00) Azores, Cape Verde Islands |
423+------------+----------------------------------------------------------------+
424| UTC | (UTC) Casablanca, Dublin, Edinburgh, London, Lisbon, Monrovia |
425+------------+----------------------------------------------------------------+
426| UP1 | (UTC + 1:00) Berlin, Brussels, Copenhagen, Madrid, Paris, Rome |
427+------------+----------------------------------------------------------------+
428| UP2 | (UTC + 2:00) Kaliningrad, South Africa, Warsaw |
429+------------+----------------------------------------------------------------+
430| UP3 | (UTC + 3:00) Baghdad, Riyadh, Moscow, Nairobi |
431+------------+----------------------------------------------------------------+
432| UP25 | (UTC + 3:30) Tehran |
433+------------+----------------------------------------------------------------+
434| UP4 | (UTC + 4:00) Adu Dhabi, Baku, Muscat, Tbilisi |
435+------------+----------------------------------------------------------------+
436| UP35 | (UTC + 4:30) Kabul |
437+------------+----------------------------------------------------------------+
438| UP5 | (UTC + 5:00) Islamabad, Karachi, Tashkent |
439+------------+----------------------------------------------------------------+
440| UP45 | (UTC + 5:30) Bombay, Calcutta, Madras, New Delhi |
441+------------+----------------------------------------------------------------+
442| UP6 | (UTC + 6:00) Almaty, Colomba, Dhaka |
443+------------+----------------------------------------------------------------+
444| UP7 | (UTC + 7:00) Bangkok, Hanoi, Jakarta |
445+------------+----------------------------------------------------------------+
446| UP8 | (UTC + 8:00) Beijing, Hong Kong, Perth, Singapore, Taipei |
447+------------+----------------------------------------------------------------+
448| UP9 | (UTC + 9:00) Osaka, Sapporo, Seoul, Tokyo, Yakutsk |
449+------------+----------------------------------------------------------------+
450| UP85 | (UTC + 9:30) Adelaide, Darwin |
451+------------+----------------------------------------------------------------+
452| UP10 | (UTC + 10:00) Melbourne, Papua New Guinea, Sydney, Vladivostok |
453+------------+----------------------------------------------------------------+
454| UP11 | (UTC + 11:00) Magadan, New Caledonia, Solomon Islands |
455+------------+----------------------------------------------------------------+
456| UP12 | (UTC + 12:00) Auckland, Wellington, Fiji, Marshall Island |
457+------------+----------------------------------------------------------------+