我正在制作一个通知系统,它需要自功能以来的时间。
我将此脚本用于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