/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk

« back to all changes in this revision

Viewing changes to codeigniter/system/helpers/date_helper.php

  • Committer: galaxyAbstractor
  • Date: 2013-04-04 16:19:07 UTC
  • mto: (12.2.4 lenasys) (19.1.4 lenasys)
  • mto: This revision was merged to the branch mainline in revision 17.
  • Revision ID: galaxyabstractor@gmail.com-20130404161907-eo1wnb7ac2rnizg8
Started implementation of a new codeviewer using Ace

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2
 
/**
3
 
 * CodeIgniter
4
 
 *
5
 
 * An open source application development framework for PHP 5.1.6 or newer
6
 
 *
7
 
 * @package             CodeIgniter
8
 
 * @author              ExpressionEngine Dev Team
9
 
 * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc.
10
 
 * @license             http://codeigniter.com/user_guide/license.html
11
 
 * @link                http://codeigniter.com
12
 
 * @since               Version 1.0
13
 
 * @filesource
14
 
 */
15
 
 
16
 
// ------------------------------------------------------------------------
17
 
 
18
 
/**
19
 
 * CodeIgniter Date Helpers
20
 
 *
21
 
 * @package             CodeIgniter
22
 
 * @subpackage  Helpers
23
 
 * @category    Helpers
24
 
 * @author              ExpressionEngine Dev Team
25
 
 * @link                http://codeigniter.com/user_guide/helpers/date_helper.html
26
 
 */
27
 
 
28
 
// ------------------------------------------------------------------------
29
 
 
30
 
/**
31
 
 * Get "now" time
32
 
 *
33
 
 * Returns time() or its GMT equivalent based on the config file preference
34
 
 *
35
 
 * @access      public
36
 
 * @return      integer
37
 
 */
38
 
if ( ! function_exists('now'))
39
 
{
40
 
        function now()
41
 
        {
42
 
                $CI =& get_instance();
43
 
 
44
 
                if (strtolower($CI->config->item('time_reference')) == 'gmt')
45
 
                {
46
 
                        $now = time();
47
 
                        $system_time = mktime(gmdate("H", $now), gmdate("i", $now), gmdate("s", $now), gmdate("m", $now), gmdate("d", $now), gmdate("Y", $now));
48
 
 
49
 
                        if (strlen($system_time) < 10)
50
 
                        {
51
 
                                $system_time = time();
52
 
                                log_message('error', 'The Date class could not set a proper GMT timestamp so the local time() value was used.');
53
 
                        }
54
 
 
55
 
                        return $system_time;
56
 
                }
57
 
                else
58
 
                {
59
 
                        return time();
60
 
                }
61
 
        }
62
 
}
63
 
 
64
 
// ------------------------------------------------------------------------
65
 
 
66
 
/**
67
 
 * Convert MySQL Style Datecodes
68
 
 *
69
 
 * This function is identical to PHPs date() function,
70
 
 * except that it allows date codes to be formatted using
71
 
 * the MySQL style, where each code letter is preceded
72
 
 * with a percent sign:  %Y %m %d etc...
73
 
 *
74
 
 * The benefit of doing dates this way is that you don't
75
 
 * have to worry about escaping your text letters that
76
 
 * match the date codes.
77
 
 *
78
 
 * @access      public
79
 
 * @param       string
80
 
 * @param       integer
81
 
 * @return      integer
82
 
 */
83
 
if ( ! function_exists('mdate'))
84
 
{
85
 
        function mdate($datestr = '', $time = '')
86
 
        {
87
 
                if ($datestr == '')
88
 
                        return '';
89
 
 
90
 
                if ($time == '')
91
 
                        $time = now();
92
 
 
93
 
                $datestr = str_replace('%\\', '', preg_replace("/([a-z]+?){1}/i", "\\\\\\1", $datestr));
94
 
                return date($datestr, $time);
95
 
        }
96
 
}
97
 
 
98
 
// ------------------------------------------------------------------------
99
 
 
100
 
/**
101
 
 * Standard Date
102
 
 *
103
 
 * Returns a date formatted according to the submitted standard.
104
 
 *
105
 
 * @access      public
106
 
 * @param       string  the chosen format
107
 
 * @param       integer Unix timestamp
108
 
 * @return      string
109
 
 */
110
 
if ( ! function_exists('standard_date'))
111
 
{
112
 
        function standard_date($fmt = 'DATE_RFC822', $time = '')
113
 
        {
114
 
                $formats = array(
115
 
                                                'DATE_ATOM'             =>      '%Y-%m-%dT%H:%i:%s%Q',
116
 
                                                'DATE_COOKIE'   =>      '%l, %d-%M-%y %H:%i:%s UTC',
117
 
                                                'DATE_ISO8601'  =>      '%Y-%m-%dT%H:%i:%s%Q',
118
 
                                                'DATE_RFC822'   =>      '%D, %d %M %y %H:%i:%s %O',
119
 
                                                'DATE_RFC850'   =>      '%l, %d-%M-%y %H:%i:%s UTC',
120
 
                                                'DATE_RFC1036'  =>      '%D, %d %M %y %H:%i:%s %O',
121
 
                                                'DATE_RFC1123'  =>      '%D, %d %M %Y %H:%i:%s %O',
122
 
                                                'DATE_RSS'              =>      '%D, %d %M %Y %H:%i:%s %O',
123
 
                                                'DATE_W3C'              =>      '%Y-%m-%dT%H:%i:%s%Q'
124
 
                                                );
125
 
 
126
 
                if ( ! isset($formats[$fmt]))
127
 
                {
128
 
                        return FALSE;
129
 
                }
130
 
 
131
 
                return mdate($formats[$fmt], $time);
132
 
        }
133
 
}
134
 
 
135
 
// ------------------------------------------------------------------------
136
 
 
137
 
/**
138
 
 * Timespan
139
 
 *
140
 
 * Returns a span of seconds in this format:
141
 
 *      10 days 14 hours 36 minutes 47 seconds
142
 
 *
143
 
 * @access      public
144
 
 * @param       integer a number of seconds
145
 
 * @param       integer Unix timestamp
146
 
 * @return      integer
147
 
 */
148
 
if ( ! function_exists('timespan'))
149
 
{
150
 
        function timespan($seconds = 1, $time = '')
151
 
        {
152
 
                $CI =& get_instance();
153
 
                $CI->lang->load('date');
154
 
 
155
 
                if ( ! is_numeric($seconds))
156
 
                {
157
 
                        $seconds = 1;
158
 
                }
159
 
 
160
 
                if ( ! is_numeric($time))
161
 
                {
162
 
                        $time = time();
163
 
                }
164
 
 
165
 
                if ($time <= $seconds)
166
 
                {
167
 
                        $seconds = 1;
168
 
                }
169
 
                else
170
 
                {
171
 
                        $seconds = $time - $seconds;
172
 
                }
173
 
 
174
 
                $str = '';
175
 
                $years = floor($seconds / 31536000);
176
 
 
177
 
                if ($years > 0)
178
 
                {
179
 
                        $str .= $years.' '.$CI->lang->line((($years     > 1) ? 'date_years' : 'date_year')).', ';
180
 
                }
181
 
 
182
 
                $seconds -= $years * 31536000;
183
 
                $months = floor($seconds / 2628000);
184
 
 
185
 
                if ($years > 0 OR $months > 0)
186
 
                {
187
 
                        if ($months > 0)
188
 
                        {
189
 
                                $str .= $months.' '.$CI->lang->line((($months   > 1) ? 'date_months' : 'date_month')).', ';
190
 
                        }
191
 
 
192
 
                        $seconds -= $months * 2628000;
193
 
                }
194
 
 
195
 
                $weeks = floor($seconds / 604800);
196
 
 
197
 
                if ($years > 0 OR $months > 0 OR $weeks > 0)
198
 
                {
199
 
                        if ($weeks > 0)
200
 
                        {
201
 
                                $str .= $weeks.' '.$CI->lang->line((($weeks     > 1) ? 'date_weeks' : 'date_week')).', ';
202
 
                        }
203
 
 
204
 
                        $seconds -= $weeks * 604800;
205
 
                }
206
 
 
207
 
                $days = floor($seconds / 86400);
208
 
 
209
 
                if ($months > 0 OR $weeks > 0 OR $days > 0)
210
 
                {
211
 
                        if ($days > 0)
212
 
                        {
213
 
                                $str .= $days.' '.$CI->lang->line((($days       > 1) ? 'date_days' : 'date_day')).', ';
214
 
                        }
215
 
 
216
 
                        $seconds -= $days * 86400;
217
 
                }
218
 
 
219
 
                $hours = floor($seconds / 3600);
220
 
 
221
 
                if ($days > 0 OR $hours > 0)
222
 
                {
223
 
                        if ($hours > 0)
224
 
                        {
225
 
                                $str .= $hours.' '.$CI->lang->line((($hours     > 1) ? 'date_hours' : 'date_hour')).', ';
226
 
                        }
227
 
 
228
 
                        $seconds -= $hours * 3600;
229
 
                }
230
 
 
231
 
                $minutes = floor($seconds / 60);
232
 
 
233
 
                if ($days > 0 OR $hours > 0 OR $minutes > 0)
234
 
                {
235
 
                        if ($minutes > 0)
236
 
                        {
237
 
                                $str .= $minutes.' '.$CI->lang->line((($minutes > 1) ? 'date_minutes' : 'date_minute')).', ';
238
 
                        }
239
 
 
240
 
                        $seconds -= $minutes * 60;
241
 
                }
242
 
 
243
 
                if ($str == '')
244
 
                {
245
 
                        $str .= $seconds.' '.$CI->lang->line((($seconds > 1) ? 'date_seconds' : 'date_second')).', ';
246
 
                }
247
 
 
248
 
                return substr(trim($str), 0, -1);
249
 
        }
250
 
}
251
 
 
252
 
// ------------------------------------------------------------------------
253
 
 
254
 
/**
255
 
 * Number of days in a month
256
 
 *
257
 
 * Takes a month/year as input and returns the number of days
258
 
 * for the given month/year. Takes leap years into consideration.
259
 
 *
260
 
 * @access      public
261
 
 * @param       integer a numeric month
262
 
 * @param       integer a numeric year
263
 
 * @return      integer
264
 
 */
265
 
if ( ! function_exists('days_in_month'))
266
 
{
267
 
        function days_in_month($month = 0, $year = '')
268
 
        {
269
 
                if ($month < 1 OR $month > 12)
270
 
                {
271
 
                        return 0;
272
 
                }
273
 
 
274
 
                if ( ! is_numeric($year) OR strlen($year) != 4)
275
 
                {
276
 
                        $year = date('Y');
277
 
                }
278
 
 
279
 
                if ($month == 2)
280
 
                {
281
 
                        if ($year % 400 == 0 OR ($year % 4 == 0 AND $year % 100 != 0))
282
 
                        {
283
 
                                return 29;
284
 
                        }
285
 
                }
286
 
 
287
 
                $days_in_month  = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
288
 
                return $days_in_month[$month - 1];
289
 
        }
290
 
}
291
 
 
292
 
// ------------------------------------------------------------------------
293
 
 
294
 
/**
295
 
 * Converts a local Unix timestamp to GMT
296
 
 *
297
 
 * @access      public
298
 
 * @param       integer Unix timestamp
299
 
 * @return      integer
300
 
 */
301
 
if ( ! function_exists('local_to_gmt'))
302
 
{
303
 
        function local_to_gmt($time = '')
304
 
        {
305
 
                if ($time == '')
306
 
                        $time = time();
307
 
 
308
 
                return mktime( gmdate("H", $time), gmdate("i", $time), gmdate("s", $time), gmdate("m", $time), gmdate("d", $time), gmdate("Y", $time));
309
 
        }
310
 
}
311
 
 
312
 
// ------------------------------------------------------------------------
313
 
 
314
 
/**
315
 
 * Converts GMT time to a localized value
316
 
 *
317
 
 * Takes a Unix timestamp (in GMT) as input, and returns
318
 
 * at the local value based on the timezone and DST setting
319
 
 * submitted
320
 
 *
321
 
 * @access      public
322
 
 * @param       integer Unix timestamp
323
 
 * @param       string  timezone
324
 
 * @param       bool    whether DST is active
325
 
 * @return      integer
326
 
 */
327
 
if ( ! function_exists('gmt_to_local'))
328
 
{
329
 
        function gmt_to_local($time = '', $timezone = 'UTC', $dst = FALSE)
330
 
        {
331
 
                if ($time == '')
332
 
                {
333
 
                        return now();
334
 
                }
335
 
 
336
 
                $time += timezones($timezone) * 3600;
337
 
 
338
 
                if ($dst == TRUE)
339
 
                {
340
 
                        $time += 3600;
341
 
                }
342
 
 
343
 
                return $time;
344
 
        }
345
 
}
346
 
 
347
 
// ------------------------------------------------------------------------
348
 
 
349
 
/**
350
 
 * Converts a MySQL Timestamp to Unix
351
 
 *
352
 
 * @access      public
353
 
 * @param       integer Unix timestamp
354
 
 * @return      integer
355
 
 */
356
 
if ( ! function_exists('mysql_to_unix'))
357
 
{
358
 
        function mysql_to_unix($time = '')
359
 
        {
360
 
                // We'll remove certain characters for backward compatibility
361
 
                // since the formatting changed with MySQL 4.1
362
 
                // YYYY-MM-DD HH:MM:SS
363
 
 
364
 
                $time = str_replace('-', '', $time);
365
 
                $time = str_replace(':', '', $time);
366
 
                $time = str_replace(' ', '', $time);
367
 
 
368
 
                // YYYYMMDDHHMMSS
369
 
                return  mktime(
370
 
                                                substr($time, 8, 2),
371
 
                                                substr($time, 10, 2),
372
 
                                                substr($time, 12, 2),
373
 
                                                substr($time, 4, 2),
374
 
                                                substr($time, 6, 2),
375
 
                                                substr($time, 0, 4)
376
 
                                                );
377
 
        }
378
 
}
379
 
 
380
 
// ------------------------------------------------------------------------
381
 
 
382
 
/**
383
 
 * Unix to "Human"
384
 
 *
385
 
 * Formats Unix timestamp to the following prototype: 2006-08-21 11:35 PM
386
 
 *
387
 
 * @access      public
388
 
 * @param       integer Unix timestamp
389
 
 * @param       bool    whether to show seconds
390
 
 * @param       string  format: us or euro
391
 
 * @return      string
392
 
 */
393
 
if ( ! function_exists('unix_to_human'))
394
 
{
395
 
        function unix_to_human($time = '', $seconds = FALSE, $fmt = 'us')
396
 
        {
397
 
                $r  = date('Y', $time).'-'.date('m', $time).'-'.date('d', $time).' ';
398
 
 
399
 
                if ($fmt == 'us')
400
 
                {
401
 
                        $r .= date('h', $time).':'.date('i', $time);
402
 
                }
403
 
                else
404
 
                {
405
 
                        $r .= date('H', $time).':'.date('i', $time);
406
 
                }
407
 
 
408
 
                if ($seconds)
409
 
                {
410
 
                        $r .= ':'.date('s', $time);
411
 
                }
412
 
 
413
 
                if ($fmt == 'us')
414
 
                {
415
 
                        $r .= ' '.date('A', $time);
416
 
                }
417
 
 
418
 
                return $r;
419
 
        }
420
 
}
421
 
 
422
 
// ------------------------------------------------------------------------
423
 
 
424
 
/**
425
 
 * Convert "human" date to GMT
426
 
 *
427
 
 * Reverses the above process
428
 
 *
429
 
 * @access      public
430
 
 * @param       string  format: us or euro
431
 
 * @return      integer
432
 
 */
433
 
if ( ! function_exists('human_to_unix'))
434
 
{
435
 
        function human_to_unix($datestr = '')
436
 
        {
437
 
                if ($datestr == '')
438
 
                {
439
 
                        return FALSE;
440
 
                }
441
 
 
442
 
                $datestr = trim($datestr);
443
 
                $datestr = preg_replace("/\040+/", ' ', $datestr);
444
 
 
445
 
                if ( ! preg_match('/^[0-9]{2,4}\-[0-9]{1,2}\-[0-9]{1,2}\s[0-9]{1,2}:[0-9]{1,2}(?::[0-9]{1,2})?(?:\s[AP]M)?$/i', $datestr))
446
 
                {
447
 
                        return FALSE;
448
 
                }
449
 
 
450
 
                $split = explode(' ', $datestr);
451
 
 
452
 
                $ex = explode("-", $split['0']);
453
 
 
454
 
                $year  = (strlen($ex['0']) == 2) ? '20'.$ex['0'] : $ex['0'];
455
 
                $month = (strlen($ex['1']) == 1) ? '0'.$ex['1']  : $ex['1'];
456
 
                $day   = (strlen($ex['2']) == 1) ? '0'.$ex['2']  : $ex['2'];
457
 
 
458
 
                $ex = explode(":", $split['1']);
459
 
 
460
 
                $hour = (strlen($ex['0']) == 1) ? '0'.$ex['0'] : $ex['0'];
461
 
                $min  = (strlen($ex['1']) == 1) ? '0'.$ex['1'] : $ex['1'];
462
 
 
463
 
                if (isset($ex['2']) && preg_match('/[0-9]{1,2}/', $ex['2']))
464
 
                {
465
 
                        $sec  = (strlen($ex['2']) == 1) ? '0'.$ex['2'] : $ex['2'];
466
 
                }
467
 
                else
468
 
                {
469
 
                        // Unless specified, seconds get set to zero.
470
 
                        $sec = '00';
471
 
                }
472
 
 
473
 
                if (isset($split['2']))
474
 
                {
475
 
                        $ampm = strtolower($split['2']);
476
 
 
477
 
                        if (substr($ampm, 0, 1) == 'p' AND $hour < 12)
478
 
                                $hour = $hour + 12;
479
 
 
480
 
                        if (substr($ampm, 0, 1) == 'a' AND $hour == 12)
481
 
                                $hour =  '00';
482
 
 
483
 
                        if (strlen($hour) == 1)
484
 
                                $hour = '0'.$hour;
485
 
                }
486
 
 
487
 
                return mktime($hour, $min, $sec, $month, $day, $year);
488
 
        }
489
 
}
490
 
 
491
 
// ------------------------------------------------------------------------
492
 
 
493
 
/**
494
 
 * Timezone Menu
495
 
 *
496
 
 * Generates a drop-down menu of timezones.
497
 
 *
498
 
 * @access      public
499
 
 * @param       string  timezone
500
 
 * @param       string  classname
501
 
 * @param       string  menu name
502
 
 * @return      string
503
 
 */
504
 
if ( ! function_exists('timezone_menu'))
505
 
{
506
 
        function timezone_menu($default = 'UTC', $class = "", $name = 'timezones')
507
 
        {
508
 
                $CI =& get_instance();
509
 
                $CI->lang->load('date');
510
 
 
511
 
                if ($default == 'GMT')
512
 
                        $default = 'UTC';
513
 
 
514
 
                $menu = '<select name="'.$name.'"';
515
 
 
516
 
                if ($class != '')
517
 
                {
518
 
                        $menu .= ' class="'.$class.'"';
519
 
                }
520
 
 
521
 
                $menu .= ">\n";
522
 
 
523
 
                foreach (timezones() as $key => $val)
524
 
                {
525
 
                        $selected = ($default == $key) ? " selected='selected'" : '';
526
 
                        $menu .= "<option value='{$key}'{$selected}>".$CI->lang->line($key)."</option>\n";
527
 
                }
528
 
 
529
 
                $menu .= "</select>";
530
 
 
531
 
                return $menu;
532
 
        }
533
 
}
534
 
 
535
 
// ------------------------------------------------------------------------
536
 
 
537
 
/**
538
 
 * Timezones
539
 
 *
540
 
 * Returns an array of timezones.  This is a helper function
541
 
 * for various other ones in this library
542
 
 *
543
 
 * @access      public
544
 
 * @param       string  timezone
545
 
 * @return      string
546
 
 */
547
 
if ( ! function_exists('timezones'))
548
 
{
549
 
        function timezones($tz = '')
550
 
        {
551
 
                // Note: Don't change the order of these even though
552
 
                // some items appear to be in the wrong order
553
 
 
554
 
                $zones = array(
555
 
                                                'UM12'          => -12,
556
 
                                                'UM11'          => -11,
557
 
                                                'UM10'          => -10,
558
 
                                                'UM95'          => -9.5,
559
 
                                                'UM9'           => -9,
560
 
                                                'UM8'           => -8,
561
 
                                                'UM7'           => -7,
562
 
                                                'UM6'           => -6,
563
 
                                                'UM5'           => -5,
564
 
                                                'UM45'          => -4.5,
565
 
                                                'UM4'           => -4,
566
 
                                                'UM35'          => -3.5,
567
 
                                                'UM3'           => -3,
568
 
                                                'UM2'           => -2,
569
 
                                                'UM1'           => -1,
570
 
                                                'UTC'           => 0,
571
 
                                                'UP1'           => +1,
572
 
                                                'UP2'           => +2,
573
 
                                                'UP3'           => +3,
574
 
                                                'UP35'          => +3.5,
575
 
                                                'UP4'           => +4,
576
 
                                                'UP45'          => +4.5,
577
 
                                                'UP5'           => +5,
578
 
                                                'UP55'          => +5.5,
579
 
                                                'UP575'         => +5.75,
580
 
                                                'UP6'           => +6,
581
 
                                                'UP65'          => +6.5,
582
 
                                                'UP7'           => +7,
583
 
                                                'UP8'           => +8,
584
 
                                                'UP875'         => +8.75,
585
 
                                                'UP9'           => +9,
586
 
                                                'UP95'          => +9.5,
587
 
                                                'UP10'          => +10,
588
 
                                                'UP105'         => +10.5,
589
 
                                                'UP11'          => +11,
590
 
                                                'UP115'         => +11.5,
591
 
                                                'UP12'          => +12,
592
 
                                                'UP1275'        => +12.75,
593
 
                                                'UP13'          => +13,
594
 
                                                'UP14'          => +14
595
 
                                        );
596
 
 
597
 
                if ($tz == '')
598
 
                {
599
 
                        return $zones;
600
 
                }
601
 
 
602
 
                if ($tz == 'GMT')
603
 
                        $tz = 'UTC';
604
 
 
605
 
                return ( ! isset($zones[$tz])) ? 0 : $zones[$tz];
606
 
        }
607
 
}
608
 
 
609
 
 
610
 
/* End of file date_helper.php */
611
 
/* Location: ./system/helpers/date_helper.php */
 
 
b'\\ No newline at end of file'