当使用strtotime()转换日期值时,我面临以下问题。如果我这样做了:strtotime('1/1/2019'),输出将是1546293600 -> 31.12.2018 @ 10:00pm (UTC)
date_default_timezone_get()输出是Europe/Bucharestdate.timezone="Europe/Helsinki"我有以下两个问题。
date_default_timezone_get()不应该输出在我的托管帐户php.ini文件中配置的内容吗?(没有使用date_default_timezone_set() )?strtotime()转换结果在GMT-2时区?据我理解,如果没有提供时间戳,转换应该在当前时间进行(应该是GMT+2,赫尔辛基还是布加勒斯特)?如果我执行date_default_timezone_set('UTC'),则strtotime('1/1/2019)的转换结果是正确的(在GMT+2上)。
谢谢。
发布于 2019-01-16 09:12:15
这可能有一些原因,但我们不能告诉您原因,因为我们不知道您的应用程序,因为它可能会在运行时更改时区。
相反,您应该停止使用strtotime,而采用面向对象的DateTime函数。
使用DateTime,您可以定义日期及其时区:
// local time
$date = new \DateTimeImmutable('1/1/2019', new \DateTimeZone('Europe/Bucharest'));
echo $date->format('U > d.m.Y (e)') , '<br>';
// convert to UTC
echo $date->setTimeZone(new \DateTimeZone('UTC'))->format('U > d.m.Y (e)');这个库非常强大,比在字符串和unix时间戳上操作要冗长得多。
发布于 2019-01-16 11:06:55
使用完整的IS0 8601格式的2019-01-01T12:00:00+00:00向函数提供小时和时区。这样你就能在世界协调时得到正确的时间戳。如果你不使用我推荐的12点的时间
在下面的示例中,我将使用数字日期数组来构建此字符串。
// [Y,m,d]
$date = [2019,1,1];
for($i=1; $i<3; $i++){
$date[$i] = str_pad($date[$i],2,'0',STR_PAD_LEFT);
}
$t1 = strtotime(implode('-',$date).'T12:00:00+00:00');
echo date('r',$t1);
//=>Tue, 01 Jan 2019 12:00:00 +0000https://stackoverflow.com/questions/54212669
复制相似问题