gpt4 book ai didi

javascript - 在 Javascript 中 Time Ago undefined

转载 作者:行者123 更新时间:2023-11-29 22:00:59 25 4
gpt4 key购买 nike

我正在使用函数 prettyDate()下面将时间戳转换为更友好的格式。我不需要自动将 div 中的值转换为“Time ago”格式的插件。

API 返回时间戳 14005641661151400695785000 . date.now()给出 1400696094406 .

使用下面的代码,第一个时间戳 1400564166115转换为 2014-05-20T05:36:06.115Z , 其中函数 prettyDate()把它变成 Yesterday .

对于第二个时间戳,1400695785000转换为 2014-05-21T18:09:45.000Z ,但是 prettyDate()把它变成 undefined .此外,day_diff-1在这种情况下。 diff-14347.209并慢慢向 0 移动。

为什么给出 undefined , 是什么造成的 day_diff成为<0

JSfiddle: http://jsfiddle.net/pWNrS/

示例

var d = new Date(parseInt(1400564166115)).toISOString()
prettyDate(d) // Yesterday

var e = new Date(parseInt(1400695785000)).toISOString()
prettyDate(e) // undefined *****WHY?*****

prettyDate()

prettyDate = function(time){
var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")),
diff = (((new Date()).getTime() - date.getTime()) / 1000),
day_diff = Math.floor(diff / 86400);

if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
return;

return day_diff == 0 && (
diff < 60 && "just now" ||
diff < 120 && "1 minute ago" ||
diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
diff < 7200 && "1 hour ago" ||
diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
day_diff == 1 && "Yesterday" ||
day_diff < 7 && day_diff + " days ago" ||
day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago";
}

// If jQuery is included in the page, adds a jQuery plugin to handle it as well
if ( typeof jQuery != "undefined" )
jQuery.fn.prettyDate = function(){
return this.each(function(){
var date = prettyDate(this.title);
if ( date )
jQuery(this).text( date );
});
};

单步执行 prettyDate()

日期:Wed May 21 2014 18:35:46 GMT-0400 (EDT)

(新日期()).getTime():1400697389253

date.getTime(): 1400711746000

差异:-14356.757

day_diff:-1

最佳答案

问题与时区信息丢失有关。

当您改变 ISO 字符串时,您正在改变关于被解析的日期/时间的假设。在 ISO 格式中,“Z”表示给定的时间是 UTC。然而,一旦你去掉它,日期解析器就不再有任何关于使用哪个时区的线索,所以它使用本地时区并相应地调整时间。这就是导致您的 diff 为负数的原因(因为您本地的时区偏移)。

一个快速的解决方法是在将它传递给 new Date() 之前将“GMT”附加到日期/时间字符串的末尾:new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g,"") + 'GMT')。这是假设传入的所有日期都是 UTC/GMT。但是,如果浏览器支持 ES5(例如,您可以测试 var supportsISO8601 = Date.prototype.toISOString === 'function';,您可以只保留 ISO8601 格式并将字符串直接传递给 新日期()

关于javascript - 在 Javascript 中 Time Ago undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23790928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com