php - 时区混淆处理php中的javascript生成日期

标签 php javascript date time timezone

我位于 (PDT) 时区,时间为 2013 年 5 月 11 日星期六 20:58:51(我的时间),我使用以下代码生成了日期/时间。

var date = new Date();
alert(date);

这将返回结果

"Sat May 11 2013 20:58:51 GMT-0700 (PDT)"

如果我随后将此日期发布到 php 脚本,该脚本按以下方式处理它:

$date  = date('Y-m-d H:i:s', strtotime("Sat May 11 2013 20:58:51 GMT-0700 (PDT)"));

echo json_encode($date);

我得到了结果

"2013-05-12 03:58:51"

不是我所期望的。如果我从日期/时间中删除“GMT-0700 (PDT)”部分,我只能得到预期的时间。所以我有两个问题。

  1. 谁能告诉我如何生成这种格式的日期,但在 javascript 中没有“GMT-0700 (PDT)”部分,而不使用字符串函数/正则表达式?

  2. 我的浏览器是否给了我错误的时区,或者 php 错误地解释了时区。无论哪种情况,为什么?

最佳答案

JavaScript 始终采用您的本地服务器时区,而 PHP 会将您的日期转换为 UTC,因此您需要在使用 strtotime 之前设置您的服务器时区,如下所示,

date_default_timezone_set('America/Los_Angeles');
$date  = date('Y-m-d H:i:s', strtotime("Sat May 11 2013 20:58:51 GMT-0700 (PDT)"));
echo json_encode($date);

<强> DEMO.

或者,如果您想将 js 日期转换为 UTC 而不使用,

var date = new Date();
var utcdate = date.toUTCString()

关于php - 时区混淆处理php中的javascript生成日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16504136/

相关文章:

php - Linux 服务器上 symfony 中的无效请求错误

javascript - Angular : block/wait until promise is done

python - 在 Seaborn 情节中叠加不同年份的 Pandas 时间序列

php - Symfony2 : how to log query duration to logs/dev. 日志

php - 如何在 Laravel 和 Eager load 关系中将多个单独的 eloquent 模型组合为一个模型

javascript - 如何在菜单项中显示内联图标?

javascript - 想要在 div 中向当前日期添加 1 个月

html - 'datePublished' 属性和 HTML 'lang' 属性

php - JavaScript 传递变量并从 PHP 页面检索输出

javascript - 将属性引用从一个类传递到另一个类