1<?php
2
3namespace Sabre\VObject\Property\VCard;
4
5use Sabre\VObject\DateTimeParser;
6use Sabre\VObject\Property\Text;
7use Sabre\Xml;
8
9/**
10 * TimeStamp property.
11 *
12 * This object encodes TIMESTAMP values.
13 *
14 * @copyright Copyright (C) fruux GmbH (https://fruux.com/)
15 * @author Evert Pot (http://evertpot.com/)
16 * @license http://sabre.io/license/ Modified BSD License
17 */
18class TimeStamp extends Text {
19
20    /**
21     * In case this is a multi-value property. This string will be used as a
22     * delimiter.
23     *
24     * @var string|null
25     */
26    public $delimiter = null;
27
28    /**
29     * Returns the type of value.
30     *
31     * This corresponds to the VALUE= parameter. Every property also has a
32     * 'default' valueType.
33     *
34     * @return string
35     */
36    function getValueType() {
37
38        return 'TIMESTAMP';
39
40    }
41
42    /**
43     * Returns the value, in the format it should be encoded for json.
44     *
45     * This method must always return an array.
46     *
47     * @return array
48     */
49    function getJsonValue() {
50
51        $parts = DateTimeParser::parseVCardDateTime($this->getValue());
52
53        $dateStr =
54            $parts['year'] . '-' .
55            $parts['month'] . '-' .
56            $parts['date'] . 'T' .
57            $parts['hour'] . ':' .
58            $parts['minute'] . ':' .
59            $parts['second'];
60
61        // Timezone
62        if (!is_null($parts['timezone'])) {
63            $dateStr .= $parts['timezone'];
64        }
65
66        return [$dateStr];
67
68    }
69
70    /**
71     * This method serializes only the value of a property. This is used to
72     * create xCard or xCal documents.
73     *
74     * @param Xml\Writer $writer  XML writer.
75     *
76     * @return void
77     */
78    protected function xmlSerializeValue(Xml\Writer $writer) {
79
80        // xCard is the only XML and JSON format that has the same date and time
81        // format than vCard.
82        $valueType = strtolower($this->getValueType());
83        $writer->writeElement($valueType, $this->getValue());
84
85    }
86}
87