PHP 在不设置默认时区的情况下从字符串获取 unix 时间戳
PHP get unix timestamp from string without setting default timezone
我有 1/1/2020 00:00:00 America/Los_Angeles
时间的精确日期,我想将其转换为 UNIX 时间戳。许多答案都希望在将字符串插入 strtotime()
函数之前使用 date_default_timezone_set
设置默认时区。但我不想弄乱服务器的默认时区(可能是 UTC)。
strtotime("1/1/2020 00:00:00 America/Los_Angeles")
获取我的时间戳有什么问题吗?
我通过这种方式获得了正确的 UNIX 值。只是,文档中没有任何内容表明这是有效的。
由于你的time str是有时区的,所以不需要设置默认时区。但是当你想打印时,你需要设置默认时区。
php > echo date_default_timezone_get();
UTC
php > echo date("Y-m-d H:i:s",strtotime("1/1/2020 00:00:00 America/Los_Angeles"));
2020-01-01 08:00:00
php > echo date("Y-m-d H:i:s",strtotime("1/1/2020 00:00:00"));
2020-01-01 00:00:00
strtotime 和 datetime 还处理位于日期字符串中的时区信息。
如果省略,则使用服务器的本地设置。
这提供了正确的时间戳
strtotime("1/1/2020 00:00:00 America/Los_Angeles");
但是 date() 的输出使用服务器的本地时区。
使用DateTimeclass时不存在这些问题。
在 DateTime 对象中,时区存储在对象中,与服务器的本地设置无关。
echo date_default_timezone_get(); //my Server get Europe/Berlin
$dateTimeLA = date_create("1/1/2020 00:00:00", new DateTimeZone('America/Los_Angeles'));
echo $dateTimeLA->format("Y-m-d H:i:s e");
输出:2020-01-01 00:00:00 America/Los_Angeles
如果需要时间戳:
$tsLA = $dateTimeLA->getTimeStamp();
echo $tsLA; //1577865600
如何从时间戳创建日期时间对象:
$dateFromTs = date_create(null, new DateTimeZone('America/Los_Angeles'));
$dateFromTs->setTimestamp(1577865600);
var_dump($dateFromTs);
输出:
object(DateTime)#4 (3) {
["date"]=>
string(19) "2020-01-01 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(19) "America/Los_Angeles"
}
我有 1/1/2020 00:00:00 America/Los_Angeles
时间的精确日期,我想将其转换为 UNIX 时间戳。许多答案都希望在将字符串插入 strtotime()
函数之前使用 date_default_timezone_set
设置默认时区。但我不想弄乱服务器的默认时区(可能是 UTC)。
strtotime("1/1/2020 00:00:00 America/Los_Angeles")
获取我的时间戳有什么问题吗?
我通过这种方式获得了正确的 UNIX 值。只是,文档中没有任何内容表明这是有效的。
由于你的time str是有时区的,所以不需要设置默认时区。但是当你想打印时,你需要设置默认时区。
php > echo date_default_timezone_get();
UTC
php > echo date("Y-m-d H:i:s",strtotime("1/1/2020 00:00:00 America/Los_Angeles"));
2020-01-01 08:00:00
php > echo date("Y-m-d H:i:s",strtotime("1/1/2020 00:00:00"));
2020-01-01 00:00:00
strtotime 和 datetime 还处理位于日期字符串中的时区信息。 如果省略,则使用服务器的本地设置。
这提供了正确的时间戳
strtotime("1/1/2020 00:00:00 America/Los_Angeles");
但是 date() 的输出使用服务器的本地时区。
使用DateTimeclass时不存在这些问题。 在 DateTime 对象中,时区存储在对象中,与服务器的本地设置无关。
echo date_default_timezone_get(); //my Server get Europe/Berlin
$dateTimeLA = date_create("1/1/2020 00:00:00", new DateTimeZone('America/Los_Angeles'));
echo $dateTimeLA->format("Y-m-d H:i:s e");
输出:2020-01-01 00:00:00 America/Los_Angeles
如果需要时间戳:
$tsLA = $dateTimeLA->getTimeStamp();
echo $tsLA; //1577865600
如何从时间戳创建日期时间对象:
$dateFromTs = date_create(null, new DateTimeZone('America/Los_Angeles'));
$dateFromTs->setTimestamp(1577865600);
var_dump($dateFromTs);
输出:
object(DateTime)#4 (3) {
["date"]=>
string(19) "2020-01-01 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(19) "America/Los_Angeles"
}