好的,这是一个奇怪的问题。在我的一个修改中,PHP代码使用time()将时间戳存储在数据库中 - 据我所知,这使用了UTC时区。现在,我抓住这些数据并将其用作某些Javascript函数中的参数。此函数返回类似于“30秒前”或“2小时30分钟前”的时间字符串等。这是完整的功能:
time_string : function(seconds,complexity,seconds_left,suffix,prefix){
var difference = Math.abs(dynamo.time - seconds);
seconds_left = seconds_left == null ? 0 : seconds_left;
seconds = +seconds;
if(difference < 15 && !seconds_left){
return "Just now";
}
suffix = suffix != null
? (seconds_left == 1
? ""
: suffix)
: (seconds_left == 1
? ""
: " ago");
prefix = prefix != null ? prefix : "";
if(difference > 86400){
return new Date(seconds * 1000).toDateString();
} else {
var years = Math.floor(difference / 31536000);
var days = Math.floor((difference / 86400) % 365);
var hours = Math.floor((difference / 3600) % 24);
var minutes = Math.floor((difference / 60) % 60);
var second = difference % 60;
var time_str = [];
if(years > 0) time_str[time_str.length] = dynamo.toolbox.format_number(years) + " year" + (years == 1 ? '' : 's');
if(days > 0) time_str[time_str.length] = days + " day" + (days == 1 ? '' : 's');
if(hours > 0) time_str[time_str.length] = hours + " hour" + (hours == 1 ? '' : 's');
if(days <= 1){
if(minutes > 0) time_str[time_str.length] = minutes + " minute" + (minutes == 1 ? '' : 's');
if(second > 0 && !minutes && !hours && !days){
time_str[time_str.length] = second + " second" + (second == 1 ? '' : 's');
}
}
complexity = complexity != null ? complexity : 2;
time_str = time_str.slice(0,complexity);
if(time_str.length > 1){
var final_str = time_str[time_str.length-1];
time_str.pop();
time_str = time_str.join(", ") + " and " + final_str;
} else {
time_str = time_str.join("");
}
}
return prefix + time_str + suffix;
}
在代码中,使用了dynamo.time
。 dynamo.time
设置为PHP的当前time()
(我用它来计算存储时间和当前时间之间的时间差)。
但是,我需要调整difference
变量来说明客户端与服务器相比的时区差异(以前,我认为是UTC)。
我将如何做到这一点?
如果你需要它,这里有一个JS小提琴,对函数进行了一些测试:http://jsfiddle.net/Jskjv/1/
编辑:我可以搞乱新的Date()。getTimezoneOffset()来实现这个目标吗?唯一的问题是与DST存在不一致。答案 0 :(得分:0)
我不确定混淆来自哪里;假设访问者系统时钟足够好,您可以将任何时间戳与此进行比较:
Math.round(new Date().getTime() / 1000)
它也返回相同类型的unix时间戳,因此没有时区偏移的复杂性。
用户系统时钟可能太乱了。在这些情况下,您可以进行时间偏移计算,从而通过内联JavaScript传递PHP的time()
。再次,没有时区:))