如何在服务器上保持本地时间(使用 JS 和 PHP)?

Posted

技术标签:

【中文标题】如何在服务器上保持本地时间(使用 JS 和 PHP)?【英文标题】:How to keep local time on the server (using JS and PHP)? 【发布时间】:2012-11-16 22:42:38 【问题描述】:

我正在尝试制作一个像 *** 那样的评论系统。我面临的问题是当我的服务器运行 php 和我的 mysql 数据库将时间存储在不同的时区时,如何在本地时间(即 2 小时前)向用户显示他们和其他 cmets 的时间用户。

我知道要在服务器上保留本地时间,我必须使用这样的代码(将欧洲/苏黎世换成 wherever you are in the world):

$myTimezone='Europe/Zurich';date_default_timezone_set($myTimezone);

我也明白要将本地 $myTimezone 发送到我的服务器,我需要以这样的方式使用 javascript (adapted from here) 获取本地时间:

 var localDate = new Date(),
 offset= -localDate.getTimezoneOffset()/60; //can send this 'offset' variable via $.ajax to the server

我的问题不是在我的每个 PHP 脚本上都写 date_default_timezone_set($myTimezone); 来吐出时间(最终更多的地方不仅仅是评论系统),是否有可能以某种方式在我的服务器上全局设置本地时间?

【问题讨论】:

不要在意客户端时间,用户很容易因为各种原因设置错误的时间。 为什么不直接使用php的time()?它为您提供自纪元(1970 年 1 月 1 日)以来的秒数 - 通用时间,然后只需通过 javascript 将其格式化为用户端的本地时区(日期()。 .. 然后 .toLocaleString()) 我的错,请快速阅读问题。 我在工作中所做的方法是让 javascript 将与 Gmt 相比的时区差异传递回 php。然后将其保存为会话变量。那么从数据库中提取的任何时间都会从中减去变量,如果这有意义的话?所以时间显示在用户本地时间 @timpeterson - 是的,我会添加一个可以更好地解释它的答案...... 【参考方案1】:

使用 php 通过 time() 完成所有工作 - 自纪元 [1970 年 1 月 1 日] 以来的秒数 - 函数。这样所有用户的时间都与服务器同步。

然后将这个时间发送给用户,并从那里设置 javascript 格式:

var dt = new Date(time_returned_from_php * 1000); //Multiplied by 1000 since javascript uses milliseconds

然后你可以使用 javascripts .toLocalString() 让用户的格式在他们的本地。

所以只是为了回答这个问题,我将本地时间保存在服务器上。客户端和服务器时间不同步。 PHP 做它的事情,然后 JS 进来纠正它到本地时间。

只是为了好玩,您可以使用这个非常漂亮的JS plugin, timeago, 来格式化时间,使用熟悉的 ***/Facebook 样式(2 小时前...、几秒钟前等)

【讨论】:

以上是关于如何在服务器上保持本地时间(使用 JS 和 PHP)?的主要内容,如果未能解决你的问题,请参考以下文章

在服务器上调用 PHP 函数但在本地服务器上工作时找不到 JS 函数

如何使用 XAMPP 或 node.js 使 AJAX 在本地服务器上工作

Node.js localhost 服务器无法与我的 php localhost 保持会话

通过 XAMPP 从同一 Apache 服务器提供 PHP 和 Node.JS

Firebase + Next.js 无服务器,在 GCP 上 - 如何管理登台、生产 + 本地

如何在ActiveAdmin中保持UI和内容本地化