blob: 5adfb18d2786229033df004cd5e9787abe01c60b [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
Iban Eguia74009652012-06-13 22:57:50 +020023Returns the current time as a Unix timestamp, referenced either to your
24server's local time or any PHP suported timezone, based on the "time reference"
25setting in your config file. If you do not intend to set your master time reference
26to any other PHP suported timezone (which you'll typically do if you run a site that
27lets each user set their own timezone settings) there is no benefit to using this
28function over PHP's time() function.
Derek Jones8ede1a22011-10-05 13:34:52 -050029
Iban Eguia7bf0a4f2012-03-27 18:36:15 +020030.. php:method:: now($timezone = NULL)
31
32 :param string $timezone: The timezone you want to be returned
33 :returns: integer
34
35::
Iban Eguiafeb14da2012-06-12 16:09:36 +020036 echo now("Australia/Victoria");
Iban Eguia7bf0a4f2012-03-27 18:36:15 +020037
Iban Eguiafeb14da2012-06-12 16:09:36 +020038If a timezone is not provided, it will return time() based on "time_reference" setting.
Derek Jones8ede1a22011-10-05 13:34:52 -050039
40mdate()
41=======
42
43This function is identical to PHPs `date() <http://www.php.net/date>`_
44function, except that it lets you use MySQL style date codes, where each
45code letter is preceded with a percent sign: %Y %m %d etc.
46
47The benefit of doing dates this way is that you don't have to worry
48about escaping any characters that are not date codes, as you would
49normally have to do with the date() function. Example
50
51.. php:method:: mdate($datestr = '', $time = '')
52
53 :param string $datestr: Date String
54 :param integer $time: time
55 :returns: integer
56
57
58::
59
60 $datestring = "Year: %Y Month: %m Day: %d - %h:%i %a";
61 $time = time();
62 echo mdate($datestring, $time);
63
64If a timestamp is not included in the second parameter the current time
65will be used.
66
67standard_date()
68===============
69
70Lets you generate a date string in one of several standardized formats.
71Example
72
73.. php:method:: standard_date($fmt = 'DATE_RFC822', $time = '')
74
75 :param string $fmt: the chosen format
76 :param string $time: Unix timestamp
77 :returns: string
78
79::
80
81 $format = 'DATE_RFC822';
82 $time = time();
83 echo standard_date($format, $time);
84
85The first parameter must contain the format, the second parameter must
86contain the date as a Unix timestamp.
87
88Supported formats:
89
Derek Jonesce79be02012-06-25 23:23:46 -070090=============== ======================= ======================================
91Constant Description Example
92=============== ======================= ======================================
93DATE_ATOM Atom 2005-08-15T16:13:03+0000
94DATE_COOKIE HTTP Cookies Sun, 14 Aug 2005 16:13:03 UTC
95DATE_ISO8601 ISO-8601 2005-08-14T16:13:03+00:00
96DATE_RFC822 RFC 822 Sun, 14 Aug 05 16:13:03 UTC
97DATE_RFC850 RFC 850 Sunday, 14-Aug-05 16:13:03 UTC
98DATE_RFC1036 RFC 1036 Sunday, 14-Aug-05 16:13:03 UTC
99DATE_RFC1123 RFC 1123 Sun, 14 Aug 2005 16:13:03 UTC
100DATE_RFC2822 RFC 2822 Sun, 14 Aug 2005 16:13:03 +0000
101DATE_RSS RSS Sun, 14 Aug 2005 16:13:03 UTC
102DATE_W3C W3C 2005-08-14T16:13:03+0000
103=============== ======================= ======================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500104
105local_to_gmt()
106==============
107
Mat Whitney7540ded2012-06-22 12:02:10 -0700108Takes a Unix timestamp as input and returns it as GMT.
Derek Jones8ede1a22011-10-05 13:34:52 -0500109
110.. php:method:: local_to_gmt($time = '')
111
112 :param integer $time: Unix timestamp
113 :returns: string
114
115Example:
116
117::
118
119 $now = time();
120 $gmt = local_to_gmt($now);
121
122gmt_to_local()
123==============
124
125Takes a Unix timestamp (referenced to GMT) as input, and converts it to
126a localized timestamp based on the timezone and Daylight Saving time
127submitted.
128
129.. php:method:: gmt_to_local($time = '', $timezone = 'UTC', $dst = FALSE)
130
131 :param integer $time: Unix timestamp
132 :param string $timezone: timezone
133 :param boolean $dst: whether DST is active
134 :returns: integer
135
136Example
137
138::
139
140 $timestamp = '1140153693';
141 $timezone = 'UM8';
142 $daylight_saving = TRUE;
143 echo gmt_to_local($timestamp, $timezone, $daylight_saving);
144
145
146.. note:: For a list of timezones see the reference at the bottom of this page.
147
148
149mysql_to_unix()
150===============
151
Mat Whitney7540ded2012-06-22 12:02:10 -0700152Takes a MySQL Timestamp as input and returns it as Unix.
Derek Jones8ede1a22011-10-05 13:34:52 -0500153
154.. php:method:: mysql_to_unix($time = '')
155
156 :param integer $time: Unix timestamp
157 :returns: integer
158
159Example
160
161::
162
Fumito Mizunobb859fd2011-10-14 20:05:34 +0900163 $mysql = '20061124092345';
164 $unix = mysql_to_unix($mysql);
Derek Jones8ede1a22011-10-05 13:34:52 -0500165
166unix_to_human()
167===============
168
169Takes a Unix timestamp as input and returns it in a human readable
170format with this prototype
171
172.. php:method:: unix_to_human($time = '', $seconds = FALSE, $fmt = 'us')
173
174 :param integer $time: Unix timestamp
175 :param boolean $seconds: whether to show seconds
176 :param string $fmt: format: us or euro
177 :returns: integer
178
179Example
180
181::
182
183 YYYY-MM-DD HH:MM:SS AM/PM
184
185This can be useful if you need to display a date in a form field for
186submission.
187
188The time can be formatted with or without seconds, and it can be set to
189European or US format. If only the timestamp is submitted it will return
190the time without seconds formatted for the U.S. Examples
191
192::
193
194 $now = time();
195 echo unix_to_human($now); // U.S. time, no seconds
196 echo unix_to_human($now, TRUE, 'us'); // U.S. time with seconds
197 echo unix_to_human($now, TRUE, 'eu'); // Euro time with seconds
198
199human_to_unix()
200===============
201
202The opposite of the above function. Takes a "human" time as input and
203returns it as Unix. This function is useful if you accept "human"
204formatted dates submitted via a form. Returns FALSE (boolean) if the
Mat Whitney7540ded2012-06-22 12:02:10 -0700205date string passed to it is not formatted as indicated above.
Derek Jones8ede1a22011-10-05 13:34:52 -0500206
207.. php:method:: human_to_unix($datestr = '')
208
209 :param integer $datestr: Date String
210 :returns: integer
211
212Example:
213
214::
215
216 $now = time();
217 $human = unix_to_human($now);
218 $unix = human_to_unix($human);
219
220nice_date()
221===========
222
223This function can take a number poorly-formed date formats and convert
224them into something useful. It also accepts well-formed dates.
225
226The function will return a Unix timestamp by default. You can,
227optionally, pass a format string (the same type as the PHP date function
Mat Whitney7540ded2012-06-22 12:02:10 -0700228accepts) as the second parameter.
Derek Jones8ede1a22011-10-05 13:34:52 -0500229
Mat Whitney7540ded2012-06-22 12:02:10 -0700230.. php:method:: nice_date($bad_date = '', $format = FALSE)
Derek Jones8ede1a22011-10-05 13:34:52 -0500231
232 :param integer $bad_date: The terribly formatted date-like string
233 :param string $format: Date format to return (same as php date function)
234 :returns: string
235
236Example
237
238::
239
Andrey Andreevc275b232012-06-15 16:13:17 +0300240 $bad_date = '199605';
241 // Should Produce: 1996-05-01
242 $better_date = nice_date($bad_date, 'Y-m-d');
243
244 $bad_date = '9-11-2001';
245 // Should Produce: 2001-09-11
246 $better_date = nice_date($bad_date, 'Y-m-d');
Derek Jones8ede1a22011-10-05 13:34:52 -0500247
248timespan()
249==========
250
251Formats a unix timestamp so that is appears similar to this
Derek Jones8ede1a22011-10-05 13:34:52 -0500252::
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
Mat Whitney7540ded2012-06-22 12:02:10 -0700258the 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
Mat Whitney7540ded2012-06-22 12:02:10 -0700286account.
Derek Jones8ede1a22011-10-05 13:34:52 -0500287
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
Mat Whitney7540ded2012-06-22 12:02:10 -0700383.. php:method:: timezone_menu($default = 'UTC', $class = '', $name = 'timezones', $attributes = '')
Derek Jones8ede1a22011-10-05 13:34:52 -0500384
385 :param string $default: timezone
386 :param string $class: classname
387 :param string $name: menu name
Mat Whitney7540ded2012-06-22 12:02:10 -0700388 :param mixed $attributes: attributes
Derek Jones8ede1a22011-10-05 13:34:52 -0500389 :returns: string
390
Mat Whitney7540ded2012-06-22 12:02:10 -0700391Example:
Derek Jones8ede1a22011-10-05 13:34:52 -0500392
393::
394
395 echo timezone_menu('UM8');
396
397Please see the timezone reference below to see the values of this menu.
398
399The second parameter lets you set a CSS class name for the menu.
400
Mat Whitney7540ded2012-06-22 12:02:10 -0700401The fourth parameter lets you set one or more attributes on the generated select tag.
402
Derek Jones8ede1a22011-10-05 13:34:52 -0500403.. note:: The text contained in the menu is found in the following
404 language file: `language/<your_lang>/date_lang.php`
405
406
407Timezone Reference
408==================
409
410The following table indicates each timezone and its location.
411
Kwaan Onlinee90b6842012-01-31 10:15:30 +0000412Note some of the location lists have been abridged for clarity and formatting.
413
Derek Jonesce79be02012-06-25 23:23:46 -0700414=========== =====================================================================
415Time Zone Location
416=========== =====================================================================
417UM2 (UTC - 12:00) Baker/Howland Island
418UM1 (UTC - 11:00) Samoa Time Zone, Niue
419UM0 (UTC - 10:00) Hawaii-Aleutian Standard Time, Cook Islands
420UM95 (UTC - 09:30) Marquesas Islands
421UM9 (UTC - 09:00) Alaska Standard Time, Gambier Islands
422UM8 (UTC - 08:00) Pacific Standard Time, Clipperton Island
423UM7 (UTC - 11:00) Mountain Standard Time
424UM6 (UTC - 06:00) Central Standard Time
425UM5 (UTC - 05:00) Eastern Standard Time, Western Caribbean
426UM45 (UTC - 04:30) Venezuelan Standard Time
427UM4 (UTC - 04:00) Atlantic Standard Time, Eastern Caribbean
428UM35 (UTC - 03:30) Newfoundland Standard Time
429UM3 (UTC - 03:00) Argentina, Brazil, French Guiana, Uruguay
430UM2 (UTC - 02:00) South Georgia/South Sandwich Islands
431UM (UTC -1:00) Azores, Cape Verde Islands
432UTC (UTC) Greenwich Mean Time, Western European Time
433UP1 (UTC +1:00) Central European Time, West Africa Time
434UP2 (UTC +2:00) Central Africa Time, Eastern European Time
435UP3 (UTC +3:00) Moscow Time, East Africa Time
436UP35 (UTC +3:30) Iran Standard Time
437UP4 (UTC +4:00) Azerbaijan Standard Time, Samara Time
438UP45 (UTC +4:30) Afghanistan
439UP5 (UTC +5:00) Pakistan Standard Time, Yekaterinburg Time
440UP55 (UTC +5:30) Indian Standard Time, Sri Lanka Time
441UP575 (UTC +5:45) Nepal Time
442UP6 (UTC +6:00) Bangladesh Standard Time, Bhutan Time, Omsk Time
443UP65 (UTC +6:30) Cocos Islands, Myanmar
444UP7 (UTC +7:00) Krasnoyarsk Time, Cambodia, Laos, Thailand, Vietnam
445UP8 (UTC +8:00) Australian Western Standard Time, Beijing Time
446UP875 (UTC +8:45) Australian Central Western Standard Time
447UP9 (UTC +9:00) Japan Standard Time, Korea Standard Time, Yakutsk
448UP95 (UTC +9:30) Australian Central Standard Time
449UP10 (UTC +10:00) Australian Eastern Standard Time, Vladivostok Time
450UP105 (UTC +10:30) Lord Howe Island
451UP11 (UTC +11:00) Magadan Time, Solomon Islands, Vanuatu
452UP115 (UTC +11:30) Norfolk Island
453UP12 (UTC +12:00) Fiji, Gilbert Islands, Kamchatka, New Zealand
454UP1275 (UTC +12:45) Chatham Islands Standard Time
455UP1 (UTC +13:00) Phoenix Islands Time, Tonga
456UP14 (UTC +14:00) Line Islands
457=========== =====================================================================