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