客户端时间设置在javascript中破坏了可读日期

Client time settings broke readable date in javascript

本文关键字:坏了 日期 时间 设置 javascript 客户端      更新时间:2023-09-26

我想做的是以更可读的格式显示日期,如3秒前,1小时前,昨天,6月12日等。我所做的是,首先计算注释日期的时间戳。然后用ajax将其发送到客户端,然后在javascript上创建两个日期实例,一个是评论的日期,另一个是当前日期。在那之后,我只是找出日期条目之间的差异,然后用花哨的文字写在屏幕上。一切工作良好的本地主机,甚至服务器..但有时如果客户端的pc日期早于服务器日期(独立于时区)..假设服务器时间是今天下午13.30,客户端时间是今天13.00,这个场景会失败,因为当前时间是评论的发布时间。差值为负值。我在php中创建date对象,用于注释,像这样;

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;


};

如果客户的日期较早,则注释的日期diff值为负,因此第一种情况将为真

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

显示客户端和评论日期之间的时间差。我的情况是10分钟…如果我把我的电脑时间设置晚10分钟,它工作得很好。那么我怎样才能更好地解决这个问题呢?

谢谢。

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

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