繁体   English   中英

根据ISO8601时间戳创建另一个格式化的日期字符串

[英]Create another formated date string from an ISO8601 timestamp

var date = '2014-02-02T20:10:00';
console.log(date);

为什么返回以下内容?:

'2014-02-02T20:10:00'//确定

但:

var date = new Date(date);
console.log(date);

返回:

2014年2月2日,星期日21:10:00 GMT + 0100 //不好

我希望收到以下没有偏移的内容:

2014年2月2日,星期日,格林尼治标准时间20:10:00

我该怎么做?

您不能依靠Date来正确解析字符串( 这是一个比较 ,这是在ISO8601解析-ECMA5引入之前)到Date对象中的,因此对于跨浏览器,最好自己做。 您也不能依赖于从Date.toString()返回的字符串,对于跨浏览器,您再次需要自己对其进行格式化,或者使用诸如moments.js之类的库。 就这么简单。

您拥有的字符串是ISO8601格式的日期戳,具体来说,根据ISO8601规范,由于未提供偏移量,因此将其假定为本地时间,我将假定其为UTC 许多浏览器和库,W3C和ECMA5规范(已更改勘误的勘误表)对此持不同意见,并且您不能认为本地时间是理所当然的。

您显然有一个支持这些字符串的浏览器。 但是,当您输出Date.toString您要求的是本地时间(根据您的环境),但是您希望使用UTC(假定),因此需要Date.toUTCString() ,但是这些方法取决于实现,因此您可能无法获取在不同环境中使用相同的字符串。

Java脚本

function parseMyDateString(str) {
    var parts = str.split(/[\-T:]/);

    parts[1] -= 1;

    return new Date(Date.UTC.apply(undefined, parts));
}

function padLeft(arg) {
    var str = String(arg);

    if (str.length < 2) {
        str = '0' + str;
    }

    return str;
}

function formatMyDateString(date) {
    var days = [
            'Sun',
            'Mon',
            'Tue',
            'Wed',
            'Thu',
            'Fri',
            'Sat'
        ],
        months = [
            'Jan',
            'Feb',
            'Mar',
            'Apr',
            'May',
            'Jun',
            'Jul',
            'Aug',
            'Sep',
            'Oct',
            'Nov',
            'Dec'
        ],
        dateString = [
            days[date.getUTCDay()],
            months[date.getUTCMonth()],
            padLeft(date.getUTCDate()),
            date.getUTCFullYear()
        ].join(' '),
        timeString = [
            padLeft(date.getUTCHours()),
            padLeft(date.getUTCMinutes()),
            padLeft(date.getUTCSeconds())
        ].join(':');

    return [
            dateString,
            timeString,
            'GMT'
        ].join(' ');
}

var iso8601String = '2014-02-02T20:10:00',
    dateObject = parseMyDateString(iso8601String),
    myDateString = formatMyDateString(dateObject);

console.log(myDateString);

输出量

Sun Feb 02 2014 20:10:00 GMT 

jsFiddle上

问题是时区调整,下面还有另外一行代码可解决您的问题:

var date = '2014-02-02T20:10:00'; console.log(date);
var date = new Date(date);
date.setHours(date.getHours() + (date.getTimezoneOffset()/60));
console.log(date);

这是一个工作代码示例

看一下有关W3 Schools的这篇文章。 它遍历日期对象。 您可以使用几种不同的方法来获取所需的日期格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM