客户端时间设置打破了javascript中的可读日期

时间:2011-11-20 01:01:51

标签: php javascript time timezone

我要做的是以3秒前,1小时前,昨天,6月12日等更易读的格式显示日期。 我做的是,首先计算评论日期的时间戳。然后用ajax将其发送到客户端,然后在javascript上创建两个日期实例,一个用于评论日期,另一个是当前日期。之后我发现之间的差异日期项目然后用花哨的词写在屏幕上.. 在localhost甚至服务器上一切正常。但有时如果客户端的pc日期早于服务器日期(独立于时区).. 假设服务器时间是今天下午13点30分,客户端时间是今天13.00,因为当前时间正在评论的发布时间,所以这个方案失败了。差异将是负值... 我正在这样创建日期对象以便在php中发表评论;

date("Y-m-d G:i:s")

然后将其写入mysql db .. 之后,当我选择评论时,我将其转换为时间戳,以便在客户端推送它;

$comment['timestamp'] = strtotime($row['creationDate']);

然后在javascript中,我计算人类可读的日期格式;

DateObject.getFormatted = function(unixtime){

d = new Date(unixtime*1000);
now = new Date();

var diff = (now.getTime()/1000- unixtime) ;
var result = "";

var MIN = 60,
    HOUR = 3600,
    DAY = 86400;

if(diff < 2)
    result ="just now";
else if(diff < MIN)
    result = Math.floor(diff) + " seconds ago";
else if(diff < HOUR)
    result = Math.floor(diff/60) + " minutes ago"; 
else if(diff < DAY)
    result = Math.floor(diff/3600) + " hours ago";
else if(diff < DAY*3)
{   
    var days = diff/DAY;
    if(days < 2)
        result = "yesterday";
    else
        result = Math.floor(days) + " days ago"; 
}
else if(now.getFullYear() == d.getFullYear())
{
    formattedTime = this.getTime(d);
    result = this.getSameYear(d) + " at " + formattedTime;
}
else
{
    formattedDate = this.getDate(d); 
    formattedTime = this.getTime(d);
    result = formattedDate + " at " + formattedTime;
}       

return result;




};

因此,如果客户日期更早,则评论的日期差异值为负值,因此第一种情况为真

if(diff < 2)
result ="just now";

它会随着客户端和评论日期之间的时间差而变差。在我的情况下是10分钟..如果我在10分钟后设置我的电脑时间它工作得很好.. 那么我该如何以更好的方式解决它?

谢谢。

2 个答案:

答案 0 :(得分:1)

可能会更好地从服务器发送到客户端评论日期和当前日期之间的差异吗?(而不是创建两个javascript日期实例)

答案 1 :(得分:0)

第三个日期,以便您可以计算服务器和客户端之间的差异并将其用作偏移量?