3 namespace Sabre\VObject\Property;
4 use Sabre\VObject\Component;
6 class DateTimeTest extends \PHPUnit_Framework_TestCase {
8 function testSetDateTime() {
10 $tz = new \DateTimeZone('Europe/Amsterdam');
11 $dt = new \DateTime('1985-07-04 01:30:00', $tz);
12 $dt->setTimeZone($tz);
14 $elem = new DateTime('DTSTART');
15 $elem->setDateTime($dt);
17 $this->assertEquals('19850704T013000', $elem->value);
18 $this->assertEquals('Europe/Amsterdam', (string)$elem['TZID']);
19 $this->assertEquals('DATE-TIME', (string)$elem['VALUE']);
23 function testSetDateTimeLOCAL() {
25 $tz = new \DateTimeZone('Europe/Amsterdam');
26 $dt = new \DateTime('1985-07-04 01:30:00', $tz);
27 $dt->setTimeZone($tz);
29 $elem = new DateTime('DTSTART');
30 $elem->setDateTime($dt, DateTime::LOCAL);
32 $this->assertEquals('19850704T013000', $elem->value);
33 $this->assertNull($elem['TZID']);
34 $this->assertEquals('DATE-TIME', (string)$elem['VALUE']);
38 function testSetDateTimeUTC() {
40 $tz = new \DateTimeZone('GMT');
41 $dt = new \DateTime('1985-07-04 01:30:00', $tz);
42 $dt->setTimeZone($tz);
44 $elem = new DateTime('DTSTART');
45 $elem->setDateTime($dt, DateTime::UTC);
47 $this->assertEquals('19850704T013000Z', $elem->value);
48 $this->assertNull($elem['TZID']);
49 $this->assertEquals('DATE-TIME', (string)$elem['VALUE']);
53 function testSetDateTimeLOCALTZ() {
55 $tz = new \DateTimeZone('Europe/Amsterdam');
56 $dt = new \DateTime('1985-07-04 01:30:00', $tz);
57 $dt->setTimeZone($tz);
59 $elem = new DateTime('DTSTART');
60 $elem->setDateTime($dt, DateTime::LOCALTZ);
62 $this->assertEquals('19850704T013000', $elem->value);
63 $this->assertEquals('Europe/Amsterdam', (string)$elem['TZID']);
64 $this->assertEquals('DATE-TIME', (string)$elem['VALUE']);
68 function testSetDateTimeDATE() {
70 $tz = new \DateTimeZone('Europe/Amsterdam');
71 $dt = new \DateTime('1985-07-04 01:30:00', $tz);
72 $dt->setTimeZone($tz);
74 $elem = new DateTime('DTSTART');
75 $elem->setDateTime($dt, DateTime::DATE);
77 $this->assertEquals('19850704', $elem->value);
78 $this->assertNull($elem['TZID']);
79 $this->assertEquals('DATE', (string)$elem['VALUE']);
84 * @expectedException InvalidArgumentException
86 function testSetDateTimeInvalid() {
88 $tz = new \DateTimeZone('Europe/Amsterdam');
89 $dt = new \DateTime('1985-07-04 01:30:00', $tz);
90 $dt->setTimeZone($tz);
92 $elem = new DateTime('DTSTART');
93 $elem->setDateTime($dt, 7);
97 function testGetDateTimeCached() {
99 $tz = new \DateTimeZone('Europe/Amsterdam');
100 $dt = new \DateTime('1985-07-04 01:30:00', $tz);
101 $dt->setTimeZone($tz);
103 $elem = new DateTime('DTSTART');
104 $elem->setDateTime($dt);
106 $this->assertEquals($elem->getDateTime(), $dt);
110 function testGetDateTimeDateNULL() {
112 $elem = new DateTime('DTSTART');
113 $dt = $elem->getDateTime();
115 $this->assertNull($dt);
116 $this->assertNull($elem->getDateType());
120 function testGetDateTimeDateDATE() {
122 $elem = new DateTime('DTSTART','19850704');
123 $dt = $elem->getDateTime();
125 $this->assertInstanceOf('DateTime', $dt);
126 $this->assertEquals('1985-07-04 00:00:00', $dt->format('Y-m-d H:i:s'));
127 $this->assertEquals(DateTime::DATE, $elem->getDateType());
132 function testGetDateTimeDateLOCAL() {
134 $elem = new DateTime('DTSTART','19850704T013000');
135 $dt = $elem->getDateTime();
137 $this->assertInstanceOf('DateTime', $dt);
138 $this->assertEquals('1985-07-04 01:30:00', $dt->format('Y-m-d H:i:s'));
139 $this->assertEquals(DateTime::LOCAL, $elem->getDateType());
143 function testGetDateTimeDateUTC() {
145 $elem = new DateTime('DTSTART','19850704T013000Z');
146 $dt = $elem->getDateTime();
148 $this->assertInstanceOf('DateTime', $dt);
149 $this->assertEquals('1985-07-04 01:30:00', $dt->format('Y-m-d H:i:s'));
150 $this->assertEquals('UTC', $dt->getTimeZone()->getName());
151 $this->assertEquals(DateTime::UTC, $elem->getDateType());
155 function testGetDateTimeDateLOCALTZ() {
157 $elem = new DateTime('DTSTART','19850704T013000');
158 $elem['TZID'] = 'Europe/Amsterdam';
160 $dt = $elem->getDateTime();
162 $this->assertInstanceOf('DateTime', $dt);
163 $this->assertEquals('1985-07-04 01:30:00', $dt->format('Y-m-d H:i:s'));
164 $this->assertEquals('Europe/Amsterdam', $dt->getTimeZone()->getName());
165 $this->assertEquals(DateTime::LOCALTZ, $elem->getDateType());
170 * @expectedException InvalidArgumentException
172 function testGetDateTimeDateInvalid() {
174 $elem = new DateTime('DTSTART','bla');
175 $dt = $elem->getDateTime();
179 function testGetDateTimeWeirdTZ() {
181 $elem = new DateTime('DTSTART','19850704T013000');
182 $elem['TZID'] = '/freeassociation.sourceforge.net/Tzfile/Europe/Amsterdam';
185 $event = new Component('VEVENT');
188 $timezone = new Component('VTIMEZONE');
189 $timezone->TZID = '/freeassociation.sourceforge.net/Tzfile/Europe/Amsterdam';
190 $timezone->{'X-LIC-LOCATION'} = 'Europe/Amsterdam';
192 $calendar = new Component('VCALENDAR');
193 $calendar->add($event);
194 $calendar->add($timezone);
196 $dt = $elem->getDateTime();
198 $this->assertInstanceOf('DateTime', $dt);
199 $this->assertEquals('1985-07-04 01:30:00', $dt->format('Y-m-d H:i:s'));
200 $this->assertEquals('Europe/Amsterdam', $dt->getTimeZone()->getName());
201 $this->assertEquals(DateTime::LOCALTZ, $elem->getDateType());
205 function testGetDateTimeBadTimeZone() {
207 $default = date_default_timezone_get();
208 date_default_timezone_set('Canada/Eastern');
210 $elem = new DateTime('DTSTART','19850704T013000');
211 $elem['TZID'] = 'Moon';
214 $event = new Component('VEVENT');
217 $timezone = new Component('VTIMEZONE');
218 $timezone->TZID = 'Moon';
219 $timezone->{'X-LIC-LOCATION'} = 'Moon';
221 $calendar = new Component('VCALENDAR');
222 $calendar->add($event);
223 $calendar->add($timezone);
225 $dt = $elem->getDateTime();
227 $this->assertInstanceOf('DateTime', $dt);
228 $this->assertEquals('1985-07-04 01:30:00', $dt->format('Y-m-d H:i:s'));
229 $this->assertEquals('Canada/Eastern', $dt->getTimeZone()->getName());
230 $this->assertEquals(DateTime::LOCALTZ, $elem->getDateType());
231 date_default_timezone_set($default);