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