此代码:
$timestamp = 1423522800; // Timestamp for 2015-02-10
$date1 = DateTime::createFromFormat('U', $timestamp);
echo $date1->format('d/m/Y H:i') . "\n";
echo $date1->format('U') . "\n\n";
$date2 = new DateTime('2015-02-10');
echo $date2->format('d/m/Y H:i') . "\n";
echo $date2->format('U') . "\n";
给我这个输出:
09/02/2015 23:00
1423522800
10/02/2015 00:00
1423522800
到底是怎么回事?
我认为它的时区相关,但是来自DateTime :: createFromFormat()文档:
注意:时区参数和当前时区被忽略 time参数包含UNIX时间戳(例如946684800)或 指定时区(例如2010-01-28T15:00:00 + 02:00)。
我正在使用PHP 5.5.9-1ubuntu4.5
答案 0 :(得分:0)
使用UNIX时间戳中的DateTime对象时
$timestamp = 1423522800; // Timestamp for 2015-02-10
$date1 = DateTime::createFromFormat('U', $timestamp);
或
$date1 = new DateTime('@'.$timestamp);
或
$date1 = date_create('@'.$timestamp);
创建后,对象的时区始终为+00:00或UTC。即使在创建对象时指定了时区,使用时间戳时也会忽略该时区。
$timestamp = 1423522800; // Timestamp for 2015-02-10
$date1 = DateTime::createFromFormat('U', $timestamp, new DateTimeZone('Europe/Madrid'));
var_dump($date1);
输出:
object(DateTime)#3 (3) {
["date"]=>
string(26) "2015-02-09 23:00:00.000000"
["timezone_type"]=>
int(1)
["timezone"]=>
string(6) "+00:00"
}
要获取本地时间,必须在创建DateTime之后设置时区。
$date = date_create('@1423522800')
->setTimeZone(new DateTimeZone('Europe/Madrid'));
var_dump($date);
现在该对象具有预期的时间和时区。
object(DateTime)#2 (3) {
["date"]=>
string(26) "2015-02-10 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Madrid"
}