【问题标题】:PHP and JS convert same date differentlyPHP 和 JS 以不同的方式转换相同的日期
【发布时间】:2020-06-23 16:51:59
【问题描述】:

PHP:

$start_time = '2020-06-23T22:30:00Z';
$timezone = new DateTimeZone("Australia/Sydney");
$date1 = new DateTime($start_time, $timezone);
$result = $date1->format('Y-m-d H:i:s');
echo $result; // 2020-06-23 22:30:00

JS(匹配我设置的):

var date1 = new Date('2020-06-23T22:30:00Z')
console.log(date1) // Wed Jun 24 2020 08:30:00 GMT+1000 (Australian Eastern Standard Time)

我在这里做错了什么?

【问题讨论】:

  • PHP 日期是 UTC 吗?
  • @RiggsFolly,后面的 Z 标志并不表示祖鲁时间,而是表示它是 UTC 时间字符串 - reference
  • @Klaycon 正确,对不起!但是,如果您将 UTC 时间放入浏览器中的 js 中,它将使用浏览器中的时区根据时区重新排列日期/时间
  • GMT+1000??什么? 1000 什么?
  • @Klaycon——“Zulu”、“Z”和“UTC”(甚至 GMT)实际上都是一样的:零偏移。他们没有告诉你任何关于字符串格式的信息。

标签: javascript php date


【解决方案1】:

将时区传递给 DateTime 构造函数将覆盖时间字符串上的 Z 标志。创建没有时区的对象,然后设置它:

$date1 = new DateTime($start_time); 

// object(DateTime)(
//   'date' => '2020-06-23 22:30:00.000000',
//   'timezone_type' => 2,
//   'timezone' => 'Z'
// )

 $date1->setTimezone($timezone);
// object(DateTime)(
//   'date' => '2020-06-24 08:30:00.000000',
//   'timezone_type' => 3,
//   'timezone' => 'Australia/Sydney'
// )

【讨论】:

  • 智能。我一直想知道,如果我住在 GMT 以外的任何地方,我将如何处理约会
猜你喜欢
  • 2021-04-07
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 2013-11-16
  • 1970-01-01
相关资源
最近更新 更多