c52223a5b593b3100766c634320482964e6391f9
[plcapi.git] / src / Helper / Date.php
1 <?php
2
3 namespace PhpXmlRpc\Helper;
4
5 class Date
6 {
7     /**
8      * Given a timestamp, return the corresponding ISO8601 encoded string.
9      *
10      * Really, timezones ought to be supported but the XML-RPC spec says:
11      *
12      * "Don't assume a timezone. It should be specified by the server in its documentation what assumptions it makes
13      *  about timezones."
14      *
15      * These routines always assume localtime unless $utc is set to 1, in which case UTC is assumed and an adjustment
16      * for locale is made when encoding
17      *
18      * @param int $timet (timestamp)
19      * @param int $utc (0 or 1)
20      *
21      * @return string
22      */
23     public static function iso8601Encode($timet, $utc = 0)
24     {
25         if (!$utc) {
26             $t = strftime("%Y%m%dT%H:%M:%S", $timet);
27         } else {
28             if (function_exists('gmstrftime')) {
29                 // gmstrftime doesn't exist in some versions
30                 // of PHP
31                 $t = gmstrftime("%Y%m%dT%H:%M:%S", $timet);
32             } else {
33                 $t = strftime("%Y%m%dT%H:%M:%S", $timet - date('Z'));
34             }
35         }
36
37         return $t;
38     }
39
40     /**
41      * Given an ISO8601 date string, return a timet in the localtime, or UTC.
42      *
43      * @param string $idate
44      * @param int $utc either 0 or 1
45      *
46      * @return int (datetime)
47      */
48     public static function iso8601Decode($idate, $utc = 0)
49     {
50         $t = 0;
51         if (preg_match('/([0-9]{4})([0-1][0-9])([0-3][0-9])T([0-2][0-9]):([0-5][0-9]):([0-5][0-9])/', $idate, $regs)) {
52             if ($utc) {
53                 $t = gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
54             } else {
55                 $t = mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
56             }
57         }
58
59         return $t;
60     }
61 }