/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-10 15:49:32 UTC
  • mto: (19.1.5 lenasys)
  • mto: This revision was merged to the branch mainline in revision 23.
  • Revision ID: galaxyabstractor@gmail.com-20130410154932-4vizlzk0ar5gykvi
* Added an simple admin panel to the codeviewer-cmssy stuff
* Redesigned a bit like the mockups - still stuff to come
* Implemented the codeviewer + admin panel again using the Framework CodeIgniter instead 

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'