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