1--TEST--
2RFC: DateTime and Daylight Saving Time Transitions (zone type 3, bs)
3--CREDITS--
4Daniel Convissor <danielc@php.net>
5--FILE--
6<?php
7
8date_default_timezone_set('America/New_York');
9$tz = new DateTimeZone('America/New_York');
10$date_format = 'Y-m-d H:i:s T e';
11$interval_format = 'P%dDT%hH';
12
13/*
14 * Backward Transitions, sub().
15 */
16
17$end   = new DateTime('2010-11-07 01:00:00 EST');
18$end->setTimeZone($tz);
19$interval_spec = 'PT1S';
20$interval = new DateInterval($interval_spec);
21echo 'bs1 ' . $end->format($date_format) . " - $interval_spec = "
22	. $end->sub($interval)->format($date_format) . "\n";
23
24$end   = new DateTime('2010-11-07 04:30:00');
25$interval_spec = 'P1D';
26$interval = new DateInterval($interval_spec);
27echo 'bs2 ' . $end->format($date_format) . " - $interval_spec = "
28	. $end->sub($interval)->format($date_format) . "\n";
29
30$end   = new DateTime('2010-11-07 03:30:00');
31$interval_spec = 'PT24H';
32$interval = new DateInterval($interval_spec);
33echo 'bs3 ' . $end->format($date_format) . " - $interval_spec = "
34	. $end->sub($interval)->format($date_format) . "\n";
35
36$end   = new DateTime('2010-11-07 02:30:00');
37$interval_spec = 'PT23H';
38$interval = new DateInterval($interval_spec);
39echo 'bs4 ' . $end->format($date_format) . " - $interval_spec = "
40	. $end->sub($interval)->format($date_format) . "\n";
41
42$end   = new DateTime('2010-11-07 01:30:00 EST');
43$end->setTimeZone($tz);
44$interval_spec = 'PT22H';
45$interval = new DateInterval($interval_spec);
46echo 'bs5 ' . $end->format($date_format) . " - $interval_spec = "
47	. $end->sub($interval)->format($date_format) . "\n";
48
49$end   = new DateTime('2010-11-07 01:30:00 EDT');
50$end->setTimeZone($tz);
51$interval_spec = 'PT21H';
52$interval = new DateInterval($interval_spec);
53echo 'bs6 ' . $end->format($date_format) . " - $interval_spec = "
54	. $end->sub($interval)->format($date_format) . "\n";
55
56$end   = new DateTime('2010-11-07 01:30:00');
57$interval_spec = 'P1D';
58$interval = new DateInterval($interval_spec);
59echo 'bs7 ' . $end->format($date_format) . " - $interval_spec = "
60	. $end->sub($interval)->format($date_format) . "\n";
61
62$end   = new DateTime('2010-11-07 01:30:00 EST');
63$end->setTimeZone($tz);
64$interval_spec = 'P1DT1H';
65$interval = new DateInterval($interval_spec);
66echo 'bs8 ' . $end->format($date_format) . " - $interval_spec = "
67	. $end->sub($interval)->format($date_format) . "\n";
68
69$end   = new DateTime('2010-11-07 03:30:00');
70$interval_spec = 'P1D';
71$interval = new DateInterval($interval_spec);
72echo 'bs9 ' . $end->format($date_format) . " - $interval_spec = "
73	. $end->sub($interval)->format($date_format) . "\n";
74
75$end   = new DateTime('2010-11-07 02:30:00');
76$interval_spec = 'P1D';
77$interval = new DateInterval($interval_spec);
78echo 'bs10 ' . $end->format($date_format) . " - $interval_spec = "
79	. $end->sub($interval)->format($date_format) . "\n";
80
81?>
82--EXPECT--
83bs1 2010-11-07 01:00:00 EST America/New_York - PT1S = 2010-11-07 01:59:59 EDT America/New_York
84bs2 2010-11-07 04:30:00 EST America/New_York - P1D = 2010-11-06 04:30:00 EDT America/New_York
85bs3 2010-11-07 03:30:00 EST America/New_York - PT24H = 2010-11-06 04:30:00 EDT America/New_York
86bs4 2010-11-07 02:30:00 EST America/New_York - PT23H = 2010-11-06 04:30:00 EDT America/New_York
87bs5 2010-11-07 01:30:00 EST America/New_York - PT22H = 2010-11-06 04:30:00 EDT America/New_York
88bs6 2010-11-07 01:30:00 EDT America/New_York - PT21H = 2010-11-06 04:30:00 EDT America/New_York
89bs7 2010-11-07 01:30:00 EDT America/New_York - P1D = 2010-11-06 01:30:00 EDT America/New_York
90bs8 2010-11-07 01:30:00 EST America/New_York - P1DT1H = 2010-11-06 00:30:00 EDT America/New_York
91bs9 2010-11-07 03:30:00 EST America/New_York - P1D = 2010-11-06 03:30:00 EDT America/New_York
92bs10 2010-11-07 02:30:00 EST America/New_York - P1D = 2010-11-06 02:30:00 EDT America/New_York
93