【发布时间】:2013-01-26 06:33:47
【问题描述】:
我正在制作一个通知系统,它需要时间功能。
我将这个脚本用于timesince函数(jQuery):
$.fn.updateSince = function(interval) {
var times = this.map(function(){ return { e: $(this), t: parseInt($(this).html()) }; });
var format = function(t) {
if(t > 86400) {
return Math.floor(t / 86400) + ' days ago';
} else if (t > 3600) {
return Math.floor(t / 3600) + ' hours ago';
} else if (t > 60) {
return Math.floor(t / 60) + ' minute ago';
} else if (t > 50) {
return '50 seconds ago';
} else if (t > 40) {
return '40 seconds ago';
} else if (t > 30) {
return '30 seconds ago';
} else if (t > 25) {
return '25 seconds ago';
} else if (t > 15) {
return '15 seconds ago';
} else if (t > 10) {
return '10 seconds ago';
} else {
return 'a few seconds ago';
}
}
var update = function(){
var now = new Date().getTime();
$.each(times, function(i, o){
o.e.html(format(Math.round((now - o.t) / 1000)));
});
};
window.setInterval(update, interval);
update();
return this;
}
通知存储在 MySQL 数据库中,每个通知都有一个时间戳,格式如下:2012-12-26 06:21:28
我使用PHP strtotime并在获取每个通知项的数据库超时时将其更改为UTC格式:(php)
$rows['time']= strtotime($temp_time." UTC");
当我使用 ajax 将它传递回客户端浏览器时。我将 UTC 时间(来自数据库)乘以 1000(javascript)
var time = parseInt(dbtime * 1000);
然后我可以使用jQuery的timesince函数把它变成时间之前。
问题: 我的服务器时间随客户端浏览器时间而变化。 如何使它们彼此“兼容”。
例如,2小时前根据客户端浏览器发出通知。 但是 PHP 说它是 7 小时前制作的。 因为客户端浏览器时区与我的服务器不同
我的逻辑是: 1. [PHP] 获取当前时间,并使用从数据库中获取的通知时间减去它。 数据库时间-当前时间=服务器端时间差
- [PHP] 然后我们得到一个时差。在这种情况下为 7 小时。
- [PHP] 如何将 7 小时转换为 UTC 格式?
- [Javascript] 将当前客户端浏览器时间,也以UTC格式发送到php脚本。
- [PHP] 客户端浏览器时间 - 7 小时(UTC?)= 为 javascript 使用而创建的通知的实际时间。
- [PHP] 将结果发送回 Javascript ,所以现在时间可以在客户端浏览器端 2 小时前。
我该怎么做?
仅供参考,UTC格式如(乘以1000):1314952284779
【问题讨论】:
-
使用unix时间戳,没有时区
-
但它与我的 jquery 函数不兼容
-
为什么不把 $.fn.updateSince 移到服务器端
-
因为脚本会按时间间隔执行该功能。在我看来,每隔几秒从服务器获取时间是不切实际的。
-
您可以将间隔的开始时间设置为服务器端返回的时间,从而您的js可以获得增量。
标签: php javascript jquery