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    public function getValueType()
37    {
38        return 'TIMESTAMP';
39    }
40
41    /**
42     * Returns the value, in the format it should be encoded for json.
43     *
44     * This method must always return an array.
45     *
46     * @return array
47     */
48    public function getJsonValue()
49    {
50        $parts = DateTimeParser::parseVCardDateTime($this->getValue());
51
52        $dateStr =
53            $parts['year'].'-'.
54            $parts['month'].'-'.
55            $parts['date'].'T'.
56            $parts['hour'].':'.
57            $parts['minute'].':'.
58            $parts['second'];
59
60        // Timezone
61        if (!is_null($parts['timezone'])) {
62            $dateStr .= $parts['timezone'];
63        }
64
65        return [$dateStr];
66    }
67
68    /**
69     * This method serializes only the value of a property. This is used to
70     * create xCard or xCal documents.
71     *
72     * @param Xml\Writer $writer XML writer
73     */
74    protected function xmlSerializeValue(Xml\Writer $writer)
75    {
76        // xCard is the only XML and JSON format that has the same date and time
77        // format than vCard.
78        $valueType = strtolower($this->getValueType());
79        $writer->writeElement($valueType, $this->getValue());
80    }
81}
82