我想做的是以更可读的格式显示日期,如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日期实例)
第三个日期,以便您可以计算服务器和客户端之间的差异并将其用作偏移量?