站点需要显示相对于每个用户本地时区的时间。我将日期存储在服务器上unixtimestamp
。起初我想到将时区与用户配置文件一起存储在服务器上,同时javascript
第一次自动定义它,然后让用户有机会更改它。
但是,事实证明,javascript
它不知道如何timezone
从操作系统中确定,此外,它根本不知道如何使用时区,而只能使用偏移量。
为此,您需要要求用户手动指定当前时区,无需自动检测,并ajax
使用 PHP 计算偏移量并将其传递给javascript
.
但这一切都太难了。现代用户是如此懒惰和愚蠢,原则上他可能不知道他的时区名称,并错误地指示它,没有自动检测提示,向用户询问这个问题是无利可图的。另一方面,流行的社交网络和视频托管网站可以很好地完成这项任务,并且不会要求用户指定时区。
这是一个问题,我如何在不要求用户指明他的时区的情况下,在每个用户的本地时区中使用 , 显示时间PHP
,JS
例如,VKontakte 和 YouTube 如何解决这个问题?
我很优雅地解决了这个问题。
由于JS无法判断本地时区,但可以格式化
unixTimeStamp
为本地时间,所以你就不用再从服务器端传来格式化后的时间字符串,再传给客户端再unixTimeStamp
由JS格式化为本地时间。为了让填写本地时间的数据不那么容易被用户注意到,也为了不更改服务器上的代码,我们unixTimeStamp
总是将 GMT 时间转移到本地时间地点。决定顺序如下。
1在 PHP 中,我们始终只使用 GMT 格式化时间,并且还为内容 ( ) 需要格式化的元素
gmdate()
分配一个类。我们将, , , 放入该元素的属性之一,具体取决于我们需要将其格式化为什么。dateTime
innerHTML
data-date-time
data-date
data-time
unixTimeStamp
2在 JS 数字原型中,我们定义了方便的时间格式化方法,并定义了一个方便的函数
dateTime()
,在加载文档后,将接收所有需要格式化的元素,并将它们的时间/日期/日期替换为时间,具体取决于哪个属性将被从格林威治unixTimeStamp
时间到当地时间。dateTime()
我们在加载文档后调用我们的函数。