首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在错误时区上的时间转换

在错误时区上的时间转换
EN

Stack Overflow用户
提问于 2019-01-16 08:08:08
回答 2查看 914关注 0票数 1

当使用strtotime()转换日期值时,我面临以下问题。如果我这样做了:strtotime('1/1/2019'),输出将是1546293600 -> 31.12.2018 @ 10:00pm (UTC)

  • 如果我这样做:date_default_timezone_get()输出是Europe/Bucharest
  • 在我的php.ini文件(我的主机帐户)中,时区被设置为date.timezone="Europe/Helsinki"

我有以下两个问题。

  1. date_default_timezone_get()不应该输出在我的托管帐户php.ini文件中配置的内容吗?(没有使用date_default_timezone_set() )?
  2. 为什么strtotime()转换结果在GMT-2时区?据我理解,如果没有提供时间戳,转换应该在当前时间进行(应该是GMT+2,赫尔辛基还是布加勒斯特)?

如果我执行date_default_timezone_set('UTC'),则strtotime('1/1/2019)的转换结果是正确的(在GMT+2上)。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2019-01-16 09:12:15

这可能有一些原因,但我们不能告诉您原因,因为我们不知道您的应用程序,因为它可能会在运行时更改时区。

相反,您应该停止使用strtotime,而采用面向对象的DateTime函数。

使用DateTime,您可以定义日期及其时区:

代码语言:javascript
复制
// 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时间戳上操作要冗长得多。

票数 0
EN

Stack Overflow用户

发布于 2019-01-16 11:06:55

使用完整的IS0 8601格式的2019-01-01T12:00:00+00:00向函数提供小时和时区。这样你就能在世界协调时得到正确的时间戳。如果你不使用我推荐的12点的时间

在下面的示例中,我将使用数字日期数组来构建此字符串。

代码语言:javascript
复制
//   [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 +0000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54212669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档