$this->assertEqual($expected,$value,"Test new DateTimePlus($input, $timezone): should be $expected, found $value.");
// Same during daylight savings time.
$input='2009-06-07 10:30';
$timezone='America/Chicago';
$date=newDateTimePlus($input,$timezone);
$value=$date->format('c');
$expected='2009-06-07T10:30:00-05:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus($input, $timezone): should be $expected, found $value.");
// Create date object from date string.
$input='2009-03-07';
$timezone='America/Chicago';
$date=newDateTimePlus($input,$timezone);
$value=$date->format('c');
$expected='2009-03-07T00:00:00-06:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus($input, $timezone): should be $expected, found $value.");
// Same during daylight savings time.
$input='2009-06-07';
$timezone='America/Chicago';
$date=newDateTimePlus($input,$timezone);
$value=$date->format('c');
$expected='2009-06-07T00:00:00-05:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus($input, $timezone): should be $expected, found $value.");
// Create date object from date string.
$input='2009-03-07 10:30';
$timezone='Australia/Canberra';
$date=newDateTimePlus($input,$timezone);
$value=$date->format('c');
$expected='2009-03-07T10:30:00+11:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus($input, $timezone): should be $expected, found $value.");
// Same during daylight savings time.
$input='2009-06-07 10:30';
$timezone='Australia/Canberra';
$date=newDateTimePlus($input,$timezone);
$value=$date->format('c');
$expected='2009-06-07T10:30:00+10:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus($input, $timezone): should be $expected, found $value.");
}
/**
* Test creating dates from arrays of date parts.
*/
functiontestDateArrays(){
// Create date object from date array, date only.
$input=array('year'=>2010,'month'=>2,'day'=>28);
$timezone='America/Chicago';
$date=newDateTimePlus($input,$timezone);
$value=$date->format('c');
$expected='2010-02-28T00:00:00-06:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus(array('year' => 2010, 'month' => 2, 'day' => 28), $timezone): should be $expected, found $value.");
$this->assertEqual($expected,$value,"Test new DateTimePlus(array('year' => 2010, 'month' => 2, 'day' => 28, 'hour' => 10), $timezone): should be $expected, found $value.");
// Create date object from date array, date only.
$input=array('year'=>2010,'month'=>2,'day'=>28);
$timezone='Europe/Berlin';
$date=newDateTimePlus($input,$timezone);
$value=$date->format('c');
$expected='2010-02-28T00:00:00+01:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus(array('year' => 2010, 'month' => 2, 'day' => 28), $timezone): should be $expected, found $value.");
$this->assertEqual($expected,$value,"Test new DateTimePlus(array('year' => 2010, 'month' => 2, 'day' => 28, 'hour' => 10), $timezone): should be $expected, found $value.");
}
/**
* Test creating dates from timestamps.
*/
functiontestDateTimestamp(){
// Create date object from a unix timestamp and display it in
// local time.
$input=0;
$timezone='UTC';
$date=newDateTimePlus($input,$timezone);
$value=$date->format('c');
$expected='1970-01-01T00:00:00+00:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus($input, $timezone): should be $expected, found $value.");
$expected='UTC';
$value=$date->getTimeZone()->getName();
$this->assertEqual($expected,$value,"The current timezone is $value: should be $expected.");
$expected=0;
$value=$date->getOffset();
$this->assertEqual($expected,$value,"The current offset is $value: should be $expected.");
$timezone='America/Los_Angeles';
$date->setTimezone(newDateTimeZone($timezone));
$value=$date->format('c');
$expected='1969-12-31T16:00:00-08:00';
$this->assertEqual($expected,$value,"Test \$date->setTimezone(new DateTimeZone($timezone)): should be $expected, found $value.");
$expected='America/Los_Angeles';
$value=$date->getTimeZone()->getName();
$this->assertEqual($expected,$value,"The current timezone should be $expected, found $value.");
$expected='-28800';
$value=$date->getOffset();
$this->assertEqual($expected,$value,"The current offset should be $expected, found $value.");
// Create a date using the timestamp of zero, then display its
// value both in UTC and the local timezone.
$input=0;
$timezone='America/Los_Angeles';
$date=newDateTimePlus($input,$timezone);
$offset=$date->getOffset();
$value=$date->format('c');
$expected='1969-12-31T16:00:00-08:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus($input, $timezone): should be $expected, found $value.");
$expected='America/Los_Angeles';
$value=$date->getTimeZone()->getName();
$this->assertEqual($expected,$value,"The current timezone should be $expected, found $value.");
$expected='-28800';
$value=$date->getOffset();
$this->assertEqual($expected,$value,"The current offset should be $expected, found $value.");
$timezone='UTC';
$date->setTimezone(newDateTimeZone($timezone));
$value=$date->format('c');
$expected='1970-01-01T00:00:00+00:00';
$this->assertEqual($expected,$value,"Test \$date->setTimezone(new DateTimeZone($timezone)): should be $expected, found $value.");
$expected='UTC';
$value=$date->getTimeZone()->getName();
$this->assertEqual($expected,$value,"The current timezone should be $expected, found $value.");
$expected='0';
$value=$date->getOffset();
$this->assertEqual($expected,$value,"The current offset should be $expected, found $value.");
}
/**
* Test timezone manipulation.
*/
functiontestTimezoneConversion(){
// Create date object from datetime string in UTC, and convert
// it to a local date.
$input='1970-01-01 00:00:00';
$timezone='UTC';
$date=newDateTimePlus($input,$timezone);
$value=$date->format('c');
$expected='1970-01-01T00:00:00+00:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus('$input', '$timezone'): should be $expected, found $value.");
$expected='UTC';
$value=$date->getTimeZone()->getName();
$this->assertEqual($expected,$value,"The current timezone is $value: should be $expected.");
$expected=0;
$value=$date->getOffset();
$this->assertEqual($expected,$value,"The current offset is $value: should be $expected.");
$timezone='America/Los_Angeles';
$date->setTimezone(newDateTimeZone($timezone));
$value=$date->format('c');
$expected='1969-12-31T16:00:00-08:00';
$this->assertEqual($expected,$value,"Test \$date->setTimezone(new DateTimeZone($timezone)): should be $expected, found $value.");
$expected='America/Los_Angeles';
$value=$date->getTimeZone()->getName();
$this->assertEqual($expected,$value,"The current timezone should be $expected, found $value.");
$expected='-28800';
$value=$date->getOffset();
$this->assertEqual($expected,$value,"The current offset should be $expected, found $value.");
// Convert the local time to UTC using string input.
$input='1969-12-31 16:00:00';
$timezone='America/Los_Angeles';
$date=newDateTimePlus($input,$timezone);
$offset=$date->getOffset();
$value=$date->format('c');
$expected='1969-12-31T16:00:00-08:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus('$input', '$timezone'): should be $expected, found $value.");
$expected='America/Los_Angeles';
$value=$date->getTimeZone()->getName();
$this->assertEqual($expected,$value,"The current timezone should be $expected, found $value.");
$expected='-28800';
$value=$date->getOffset();
$this->assertEqual($expected,$value,"The current offset should be $expected, found $value.");
$timezone='UTC';
$date->setTimezone(newDateTimeZone($timezone));
$value=$date->format('c');
$expected='1970-01-01T00:00:00+00:00';
$this->assertEqual($expected,$value,"Test \$date->setTimezone(new DateTimeZone($timezone)): should be $expected, found $value.");
$expected='UTC';
$value=$date->getTimeZone()->getName();
$this->assertEqual($expected,$value,"The current timezone should be $expected, found $value.");
$expected='0';
$value=$date->getOffset();
$this->assertEqual($expected,$value,"The current offset should be $expected, found $value.");
// Convert the local time to UTC using string input.
$input='1969-12-31 16:00:00';
$timezone='Europe/Warsaw';
$date=newDateTimePlus($input,$timezone);
$offset=$date->getOffset();
$value=$date->format('c');
$expected='1969-12-31T16:00:00+01:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus('$input', '$timezone'): should be $expected, found $value.");
$expected='Europe/Warsaw';
$value=$date->getTimeZone()->getName();
$this->assertEqual($expected,$value,"The current timezone should be $expected, found $value.");
$expected='+3600';
$value=$date->getOffset();
$this->assertEqual($expected,$value,"The current offset should be $expected, found $value.");
}
/**
* Test creating dates from format strings.
*/
functiontestDateFormat(){
// Create a year-only date.
$input='2009';
$timezone=NULL;
$format='Y';
$date=newDateTimePlus($input,$timezone,$format);
$value=$date->format('Y');
$expected='2009';
$this->assertEqual($expected,$value,"Test new DateTimePlus($input, $timezone, $format): should be $expected, found $value.");
// Create a month and year-only date.
$input='2009-10';
$timezone=NULL;
$format='Y-m';
$date=newDateTimePlus($input,$timezone,$format);
$value=$date->format('Y-m');
$expected='2009-10';
$this->assertEqual($expected,$value,"Test new DateTimePlus($input, $timezone, $format): should be $expected, found $value.");
// Create a time-only date.
$input='T10:30:00';
$timezone=NULL;
$format='\TH:i:s';
$date=newDateTimePlus($input,$timezone,$format);
$value=$date->format('H:i:s');
$expected='10:30:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus($input, $timezone, $format): should be $expected, found $value.");
// Create a time-only date.
$input='10:30:00';
$timezone=NULL;
$format='H:i:s';
$date=newDateTimePlus($input,$timezone,$format);
$value=$date->format('H:i:s');
$expected='10:30:00';
$this->assertEqual($expected,$value,"Test new DateTimePlus($input, $timezone, $format): should be $expected, found $value.");
}
/**
* Test invalid date handling.
*/
functiontestInvalidDates(){
// Test for invalid month names when we are using a short version
// of the month.
$input='23 abc 2012';
$timezone=NULL;
$format='d M Y';
$date=newDateTimePlus($input,$timezone,$format);
$this->assertNotEqual(count($date->getErrors()),0,"$input contains an invalid month name and produces errors.");
// Test for invalid hour.
$input='0000-00-00T45:30:00';
$timezone=NULL;
$format='Y-m-d\TH:i:s';
$date=newDateTimePlus($input,$timezone,$format);
$this->assertNotEqual(count($date->getErrors()),0,"$input contains an invalid hour and produces errors.");
// Test for invalid day.
$input='0000-00-99T05:30:00';
$timezone=NULL;
$format='Y-m-d\TH:i:s';
$date=newDateTimePlus($input,$timezone,$format);
$this->assertNotEqual(count($date->getErrors()),0,"$input contains an invalid day and produces errors.");
// Test for invalid month.
$input='0000-75-00T15:30:00';
$timezone=NULL;
$format='Y-m-d\TH:i:s';
$date=newDateTimePlus($input,$timezone,$format);
$this->assertNotEqual(count($date->getErrors()),0,"$input contains an invalid month and produces errors.");
// Test for invalid year.
$input='11-08-01T15:30:00';
$timezone=NULL;
$format='Y-m-d\TH:i:s';
$date=newDateTimePlus($input,$timezone,$format);
$this->assertNotEqual(count($date->getErrors()),0,"$input contains an invalid year and produces errors.");
// Test for invalid year from date array. 10000 as a year will
// create an exception error in the PHP DateTime object.
$this->assertEquals($initial['expected_date'],$value,sprintf("Test new DateTimePlus(%s, %s): should be %s, found %s.",$input,$initial['timezone'],$initial['expected_date'],$value));
// Check timezone name.
$value=$date->getTimeZone()->getName();
$this->assertEquals($initial['expected_timezone'],$value,sprintf("The current timezone is %s: should be %s.",$value,$initial['expected_timezone']));
// Check offset.
$value=$date->getOffset();
$this->assertEquals($initial['expected_offset'],$value,sprintf("The current offset is %s: should be %s.",$value,$initial['expected_offset']));
$this->assertEquals($transform['expected_date'],$value,sprintf("Test \$date->setTimezone(new \\DateTimeZone(%s)): should be %s, found %s.",$transform['timezone'],$transform['expected_date'],$value));
// Check transformed timezone.
$value=$date->getTimeZone()->getName();
$this->assertEquals($transform['expected_timezone'],$value,sprintf("The current timezone should be %s, found %s.",$transform['expected_timezone'],$value));
// Check transformed offset.
$value=$date->getOffset();
$this->assertEquals($transform['expected_offset'],$value,sprintf("The current offset should be %s, found %s.",$transform['expected_offset'],$value));