javascript toISOString() 忽略时区偏移量

2022-08-30 01:12:33

我正在尝试将Twitter日期时间转换为本地iso字符串(用于prettyDate),现在为期2天。我只是没有得到正确的当地时间。

im 使用以下函数:

function getLocalISOTime(twDate) {
    var d = new Date(twDate);
    var utcd = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(),
        d.getMinutes(), d.getSeconds(), d.getMilliseconds());

    // obtain local UTC offset and convert to msec
    localOffset = d.getTimezoneOffset() * 60000;
    var newdate = new Date(utcd + localOffset);
    return newdate.toISOString().replace(".000", "");
}

在newdate中一切都很好,但是toISOString()再次将其扔回原始时间...任何人都可以帮我从Twitter日期获得iso的当地时间,格式为: 星期四, 31 May 2012 08:33:41 +0000


答案 1

moment.js很棒,但有时你不想为简单的事情拉取大量的依赖项。

以下方法也有效:

    var tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
    var localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0, -1);
    
    console.log(localISOTime)  // => '2015-01-26T06:40:36.181'

摆脱了代表祖鲁时区的尾随,可以用自己的时区替换。slice(0, -1)Z


答案 2

我不使用的解决方案是将其转换为时间戳,添加时区偏移量,然后转换回日期对象,然后运行momenttoISOString()

var date = new Date(); // Or the date you'd like converted.
var isoDateTime = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString();