blob: 18216c5a220d8876a137ae86f097716bb8370c50 [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
Fumito Mizunobb859fd2011-10-14 20:05:34 +0900165 $mysql = '20061124092345';
166 $unix = mysql_to_unix($mysql);
Derek Jones8ede1a22011-10-05 13:34:52 -0500167
168unix_to_human()
169===============
170
171Takes a Unix timestamp as input and returns it in a human readable
172format with this prototype
173
174.. php:method:: unix_to_human($time = '', $seconds = FALSE, $fmt = 'us')
175
176 :param integer $time: Unix timestamp
177 :param boolean $seconds: whether to show seconds
178 :param string $fmt: format: us or euro
179 :returns: integer
180
181Example
182
183::
184
185 YYYY-MM-DD HH:MM:SS AM/PM
186
187This can be useful if you need to display a date in a form field for
188submission.
189
190The time can be formatted with or without seconds, and it can be set to
191European or US format. If only the timestamp is submitted it will return
192the time without seconds formatted for the U.S. Examples
193
194::
195
196 $now = time();
197 echo unix_to_human($now); // U.S. time, no seconds
198 echo unix_to_human($now, TRUE, 'us'); // U.S. time with seconds
199 echo unix_to_human($now, TRUE, 'eu'); // Euro time with seconds
200
201human_to_unix()
202===============
203
204The opposite of the above function. Takes a "human" time as input and
205returns it as Unix. This function is useful if you accept "human"
206formatted dates submitted via a form. Returns FALSE (boolean) if the
207date string passed to it is not formatted as indicated above.
208
209.. php:method:: human_to_unix($datestr = '')
210
211 :param integer $datestr: Date String
212 :returns: integer
213
214Example:
215
216::
217
218 $now = time();
219 $human = unix_to_human($now);
220 $unix = human_to_unix($human);
221
222nice_date()
223===========
224
225This function can take a number poorly-formed date formats and convert
226them into something useful. It also accepts well-formed dates.
227
228The function will return a Unix timestamp by default. You can,
229optionally, pass a format string (the same type as the PHP date function
230accepts) as the second parameter.
231
232.. php:method:: nice_date($bad_date = '', $format = FALSE)
233
234 :param integer $bad_date: The terribly formatted date-like string
235 :param string $format: Date format to return (same as php date function)
236 :returns: string
237
238Example
239
240::
241
242 $bad_time = 199605 // Should Produce: 1996-05-01
243 $better_time = nice_date($bad_time,'Y-m-d');
244 $bad_time = 9-11-2001 // Should Produce: 2001-09-11
245 $better_time = nice_date($human,'Y-m-d');
246
247timespan()
248==========
249
250Formats a unix timestamp so that is appears similar to this
251
252::
253
254 1 Year, 10 Months, 2 Weeks, 5 Days, 10 Hours, 16 Minutes
255
256The first parameter must contain a Unix timestamp. The second parameter
257must contain a timestamp that is greater that the first timestamp. If
Roger Herbertb81f9092012-03-12 12:46:02 +0000258the second parameter empty, the current time will be used. The third
259parameter is optional and limits the number of time units to display.
260The most common purpose for this function is to show how much time has
261elapsed from some point in time in the past to now.
Derek Jones8ede1a22011-10-05 13:34:52 -0500262
Roger Herbertb81f9092012-03-12 12:46:02 +0000263.. php:method:: timespan($seconds = 1, $time = '', $units = '')
Derek Jones8ede1a22011-10-05 13:34:52 -0500264
265 :param integer $seconds: a number of seconds
266 :param string $time: Unix timestamp
Roger Herbertb81f9092012-03-12 12:46:02 +0000267 :param integer $units: a number of time units to display
Derek Jones8ede1a22011-10-05 13:34:52 -0500268 :returns: string
269
270Example
271
272::
273
274 $post_date = '1079621429';
275 $now = time();
Roger Herbertb81f9092012-03-12 12:46:02 +0000276 $units = 2;
277 echo timespan($post_date, $now, $units);
Derek Jones8ede1a22011-10-05 13:34:52 -0500278
279.. note:: The text generated by this function is found in the following language
280 file: language/<your_lang>/date_lang.php
281
282days_in_month()
283===============
284
285Returns the number of days in a given month/year. Takes leap years into
286account.
287
288.. php:method:: days_in_month($month = 0, $year = '')
289
290 :param integer $month: a numeric month
291 :param integer $year: a numeric year
292 :returns: integer
293
294Example
295
296::
297
298 echo days_in_month(06, 2005);
299
300If the second parameter is empty, the current year will be used.
301
302timezones()
303===========
304
305Takes a timezone reference (for a list of valid timezones, see the
306"Timezone Reference" below) and returns the number of hours offset from
307UTC.
308
309.. php:method:: timezones($tz = '')
310
311 :param string $tz: a numeric timezone
312 :returns: string
313
314Example
315
316::
317
318 echo timezones('UM5');
319
320
321This function is useful when used with `timezone_menu()`.
322
323timezone_menu()
324===============
325
326Generates a pull-down menu of timezones, like this one:
327
328
329.. raw:: html
330
331 <form action="#">
332 <select name="timezones">
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000333 <option value='UM12'>(UTC -12:00) Baker/Howland Island</option>
334 <option value='UM11'>(UTC -11:00) Samoa Time Zone, Niue</option>
335 <option value='UM10'>(UTC -10:00) Hawaii-Aleutian Standard Time, Cook Islands, Tahiti</option>
336 <option value='UM95'>(UTC -9:30) Marquesas Islands</option>
337 <option value='UM9'>(UTC -9:00) Alaska Standard Time, Gambier Islands</option>
338 <option value='UM8'>(UTC -8:00) Pacific Standard Time, Clipperton Island</option>
339 <option value='UM7'>(UTC -7:00) Mountain Standard Time</option>
340 <option value='UM6'>(UTC -6:00) Central Standard Time</option>
341 <option value='UM5'>(UTC -5:00) Eastern Standard Time, Western Caribbean Standard Time</option>
342 <option value='UM45'>(UTC -4:30) Venezuelan Standard Time</option>
343 <option value='UM4'>(UTC -4:00) Atlantic Standard Time, Eastern Caribbean Standard Time</option>
344 <option value='UM35'>(UTC -3:30) Newfoundland Standard Time</option>
345 <option value='UM3'>(UTC -3:00) Argentina, Brazil, French Guiana, Uruguay</option>
346 <option value='UM2'>(UTC -2:00) South Georgia/South Sandwich Islands</option>
347 <option value='UM1'>(UTC -1:00) Azores, Cape Verde Islands</option>
348 <option value='UTC' selected='selected'>(UTC) Greenwich Mean Time, Western European Time</option>
349 <option value='UP1'>(UTC +1:00) Central European Time, West Africa Time</option>
350 <option value='UP2'>(UTC +2:00) Central Africa Time, Eastern European Time, Kaliningrad Time</option>
351 <option value='UP3'>(UTC +3:00) Moscow Time, East Africa Time</option>
352 <option value='UP35'>(UTC +3:30) Iran Standard Time</option>
353 <option value='UP4'>(UTC +4:00) Azerbaijan Standard Time, Samara Time</option>
354 <option value='UP45'>(UTC +4:30) Afghanistan</option>
355 <option value='UP5'>(UTC +5:00) Pakistan Standard Time, Yekaterinburg Time</option>
356 <option value='UP55'>(UTC +5:30) Indian Standard Time, Sri Lanka Time</option>
357 <option value='UP575'>(UTC +5:45) Nepal Time</option>
358 <option value='UP6'>(UTC +6:00) Bangladesh Standard Time, Bhutan Time, Omsk Time</option>
359 <option value='UP65'>(UTC +6:30) Cocos Islands, Myanmar</option>
360 <option value='UP7'>(UTC +7:00) Krasnoyarsk Time, Cambodia, Laos, Thailand, Vietnam</option>
361 <option value='UP8'>(UTC +8:00) Australian Western Standard Time, Beijing Time, Irkutsk Time</option>
362 <option value='UP875'>(UTC +8:45) Australian Central Western Standard Time</option>
363 <option value='UP9'>(UTC +9:00) Japan Standard Time, Korea Standard Time, Yakutsk Time</option>
364 <option value='UP95'>(UTC +9:30) Australian Central Standard Time</option>
365 <option value='UP10'>(UTC +10:00) Australian Eastern Standard Time, Vladivostok Time</option>
366 <option value='UP105'>(UTC +10:30) Lord Howe Island</option>
367 <option value='UP11'>(UTC +11:00) Magadan Time, Solomon Islands, Vanuatu</option>
368 <option value='UP115'>(UTC +11:30) Norfolk Island</option>
369 <option value='UP12'>(UTC +12:00) Fiji, Gilbert Islands, Kamchatka Time, New Zealand Standard Time</option>
370 <option value='UP1275'>(UTC +12:45) Chatham Islands Standard Time</option>
371 <option value='UP13'>(UTC +13:00) Phoenix Islands Time, Tonga</option>
372 <option value='UP14'>(UTC +14:00) Line Islands</option>
Derek Jones8ede1a22011-10-05 13:34:52 -0500373 </select>
374 </form>
375
376
377This menu is useful if you run a membership site in which your users are
378allowed to set their local timezone value.
379
380The first parameter lets you set the "selected" state of the menu. For
381example, to set Pacific time as the default you will do this
382
383.. php:method:: timezone_menu($default = 'UTC', $class = "", $name = 'timezones')
384
385 :param string $default: timezone
386 :param string $class: classname
387 :param string $name: menu name
388 :returns: string
389
390Example:
391
392::
393
394 echo timezone_menu('UM8');
395
396Please see the timezone reference below to see the values of this menu.
397
398The second parameter lets you set a CSS class name for the menu.
399
400.. note:: The text contained in the menu is found in the following
401 language file: `language/<your_lang>/date_lang.php`
402
403
404Timezone Reference
405==================
406
407The following table indicates each timezone and its location.
408
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000409Note some of the location lists have been abridged for clarity and formatting.
410
Derek Jones8ede1a22011-10-05 13:34:52 -0500411+------------+----------------------------------------------------------------+
412| Time Zone | Location |
413+============+================================================================+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000414| UM12 | (UTC - 12:00) Baker/Howland Island |
Derek Jones8ede1a22011-10-05 13:34:52 -0500415+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000416| UM11 | (UTC - 11:00) Samoa Time Zone, Niue |
Derek Jones8ede1a22011-10-05 13:34:52 -0500417+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000418| UM10 | (UTC - 10:00) Hawaii-Aleutian Standard Time, Cook Islands |
Derek Jones8ede1a22011-10-05 13:34:52 -0500419+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000420| UM95 | (UTC - 09:30) Marquesas Islands |
Derek Jones8ede1a22011-10-05 13:34:52 -0500421+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000422| UM9 | (UTC - 09:00) Alaska Standard Time, Gambier Islands |
Derek Jones8ede1a22011-10-05 13:34:52 -0500423+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000424| UM8 | (UTC - 08:00) Pacific Standard Time, Clipperton Island |
Derek Jones8ede1a22011-10-05 13:34:52 -0500425+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000426| UM7 | (UTC - 11:00) Mountain Standard Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500427+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000428| UM6 | (UTC - 06:00) Central Standard Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500429+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000430| UM5 | (UTC - 05:00) Eastern Standard Time, Western Caribbean |
Derek Jones8ede1a22011-10-05 13:34:52 -0500431+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000432| UM45 | (UTC - 04:30) Venezuelan Standard Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500433+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000434| UM4 | (UTC - 04:00) Atlantic Standard Time, Eastern Caribbean |
Derek Jones8ede1a22011-10-05 13:34:52 -0500435+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000436| UM35 | (UTC - 03:30) Newfoundland Standard Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500437+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000438| UM3 | (UTC - 03:00) Argentina, Brazil, French Guiana, Uruguay |
Derek Jones8ede1a22011-10-05 13:34:52 -0500439+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000440| UM2 | (UTC - 02:00) South Georgia/South Sandwich Islands |
Derek Jones8ede1a22011-10-05 13:34:52 -0500441+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000442| UM1 | (UTC -1:00) Azores, Cape Verde Islands |
Derek Jones8ede1a22011-10-05 13:34:52 -0500443+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000444| UTC | (UTC) Greenwich Mean Time, Western European Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500445+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000446| UP1 | (UTC +1:00) Central European Time, West Africa Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500447+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000448| UP2 | (UTC +2:00) Central Africa Time, Eastern European Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500449+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000450| UP3 | (UTC +3:00) Moscow Time, East Africa Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500451+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000452| UP35 | (UTC +3:30) Iran Standard Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500453+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000454| UP4 | (UTC +4:00) Azerbaijan Standard Time, Samara Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500455+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000456| UP45 | (UTC +4:30) Afghanistan |
Derek Jones8ede1a22011-10-05 13:34:52 -0500457+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000458| UP5 | (UTC +5:00) Pakistan Standard Time, Yekaterinburg Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500459+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000460| UP55 | (UTC +5:30) Indian Standard Time, Sri Lanka Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500461+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000462| UP575 | (UTC +5:45) Nepal Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500463+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000464| UP6 | (UTC +6:00) Bangladesh Standard Time, Bhutan Time, Omsk Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500465+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000466| UP65 | (UTC +6:30) Cocos Islands, Myanmar |
Derek Jones8ede1a22011-10-05 13:34:52 -0500467+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000468| UP7 | (UTC +7:00) Krasnoyarsk Time, Cambodia, Laos, Thailand, Vietnam|
Derek Jones8ede1a22011-10-05 13:34:52 -0500469+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000470| UP8 | (UTC +8:00) Australian Western Standard Time, Beijing Time |
Derek Jones8ede1a22011-10-05 13:34:52 -0500471+------------+----------------------------------------------------------------+
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000472| UP875 | (UTC +8:45) Australian Central Western Standard Time |
473+------------+----------------------------------------------------------------+
474| UP9 | (UTC +9:00) Japan Standard Time, Korea Standard Time, Yakutsk |
475+------------+----------------------------------------------------------------+
476| UP95 | (UTC +9:30) Australian Central Standard Time |
477+------------+----------------------------------------------------------------+
478| UP10 | (UTC +10:00) Australian Eastern Standard Time, Vladivostok Time|
479+------------+----------------------------------------------------------------+
480| UP105 | (UTC +10:30) Lord Howe Island |
481+------------+----------------------------------------------------------------+
482| UP11 | (UTC +11:00) Magadan Time, Solomon Islands, Vanuatu |
483+------------+----------------------------------------------------------------+
484| UP115 | (UTC +11:30) Norfolk Island |
485+------------+----------------------------------------------------------------+
486| UP12 | (UTC +12:00) Fiji, Gilbert Islands, Kamchatka, New Zealand |
487+------------+----------------------------------------------------------------+
488| UP1275 | (UTC +12:45) Chatham Islands Standard Time |
489+------------+----------------------------------------------------------------+
490| UP13 | (UTC +13:00) Phoenix Islands Time, Tonga |
491+------------+----------------------------------------------------------------+
492| UP14 | (UTC +14:00) Line Islands |
Derek Jones8ede1a22011-10-05 13:34:52 -0500493+------------+----------------------------------------------------------------+