【问题标题】:Convert back the time that was converted from js getTime() in PHP将 PHP 中从 js getTime() 转换回来的时间转换回来
【发布时间】:2021-02-03 05:18:08
【问题描述】:

我有接受日历日期的前端,格式如下:9/02/2021 11:00 AM

然后转换成这些格式:2021-02-09 11:00,然后通过这行代码转换成:

var timeStamp = new Date('2021-02-09 11:00').getTime() / 1000;

我知道这些产生时间在这个值:1612843200

现在在后端,我想读取那个时间值,并将其转换回 Y-m-d H:i 格式,我尝试了date('Y-m-d H:i', '1612843200'),但结果是2021-02-09 04:00

我的目的是将时间恢复为日期格式,并稍后将时区设置为 UTC,但在将时区设置为 UTC 之前,我在第一部分中遇到了麻烦

我怎样才能重新找回日期?

【问题讨论】:

  • 我从您的问题中了解到,在将秒数转换为 Y-M-D H:M 格式时,您需要得到 11:00 AM 而不是 04:00?我说的对吗?
  • 是的,一小时错过了 7 小时,为什么会这样?
  • 看看发生了什么,浏览器正在使用特定时区进行转换,当您将这些 秒 发送到后端时,您使用的是特定时区,因此PHP 转换为您在后端设置的时区。 浏览器时区和后端时区的区别
  • 如果是这样,我们该如何解决?就像我们可以在保存到数据库之前在 js 中设置时区一样吗?所以我们确切地知道时区并使用它
  • Intl.DateTimeFormat().resolvedOptions().timeZone 是要走的路!我检查了一下,它返回时区,你能用 Intl.DateTimeFormat().resolvedOptions().timeZone 写你的答案,然后将时区更改为 utc 吗?我会接受这个作为正确答案@NotABot,谢谢

标签: javascript php date


【解决方案1】:

您可以使用Intl.DateTimeFormat 获取用户的时区。

查看以下代码获取用户时区。

let userTimeZone =  Intl.DateTimeFormat().resolvedOptions().timeZone;

console.log(userTimeZone);

然后您可以将用户时区以及您使用的秒数发送到后端服务器。

您可以使用从前端获取的时区设置date_default_timezone_set。

在此处查看timezone 的列表。

根据您的需要,您可以在后端相应地更改date-time。

在你的 PHP 中,你可以尝试这样的事情

$userTimezone = $_POST["userTimeZone"];
$userSeconds = $_POST["seconds"];

date_default_timezone_set('UTC');
//Set this to get UTC timezone

【讨论】:

    【解决方案2】:

    你可以使用下面的代码,

    date('j/m/d H:i A', '1612843200')
    

    【讨论】:

    • 这不是Gabriel 正在寻找的。问题说浏览器和后端的Timezone的区别
    猜你喜欢
    • 2020-08-18
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2017-03-28
    • 2016-11-13
    • 2017-01-20
    • 1970-01-01
    相关资源
    最近更新 更多