【问题标题】:How can I turn this date type into a normal date type ? javascript [duplicate]如何将此日期类型转换为普通日期类型? javascript [重复]
【发布时间】:2014-02-14 23:20:46
【问题描述】:

如何使用 javascript 将这个 Fri Feb 21 2014 00:00:00 GMT-0800 (Pacific Standard Time) 变成这个 2014-02-21

【问题讨论】:

标签: javascript jquery


【解决方案1】:

您可以将字符串分成几个部分,然后将这些位格式化为您需要的格式:

// Reformat string like: Fri Feb 21 2014 00:00:00 GMT-0800 (Pacific Standard Time)
// do yyyy-mm-dd
function reformatDateString(s) {
    function z(n){return (n<10?'0':'') + n;}
    var months = {jan:'01', feb:'02', mar:'03', apr:'04', may:'05', jun:'06',
                  jul:'07', aug:'08', sep:'09', oct:'10', nov:'11', dec:'12'};
    s = s.split(/[ :]/g);
    return s[3] + '-' + months[s[1].toLowerCase()] + '-' + z(s[2]);
}

您可以使用 Date 构造函数,但这里没有必要。使用构造函数解析字符串是有问题的,因为 OP 中的字符串不符合 ES5 中指定的格式(并非所有正在使用的浏览器都支持),并且解析依赖于实现。

所以要使用 Date 你无论如何都需要解析这些部分,这会导致许多额外的函数调用。

【讨论】:

    【解决方案2】:

    使用标准的字符串/数组操作

    var timeStamp = 'Fri Feb 21 2014 00:00:00 GMT-0800 (Pacific Standard Time)',
        months = {
            Jan: 1,
            Feb: 2,
            Mar: 3,
            Apr: 4,
            May: 5,
            Jun: 6,
            Jul: 7,
            Aug: 8,
            Sep: 9,
            Oct: 10,
            Nov: 11,
            Dec: 12
        },
        parts = timeStamp.split(' ', 4).slice(1),
        myStamp;
    
    function pad(val) {
        if (val < 10) {
            val = '0' + val;
        }
    
        return val;
    }
    
    parts[0] = months[parts[0]];
    parts.unshift(parts.pop());
    parts[1] = pad(parts[1]);
    parts[2] = pad(parts[2]);
    mystamp = parts.join('-');
    console.log(mystamp);
    

    输出

    2014-02-21
    

    开启jsFiddle

    【讨论】:

    • 复杂且有点冗长,但它可以完成工作。 :-)
    • @RobG 这是-vv 模式。谢谢。 ;)
    【解决方案3】:

    日期Fri Feb 21 2014 00:00:00 GMT-0800 采用标准RFC 2822 格式,因此您可以使用new Date() 将其作为参数传递来创建新日期。这会将其转换为您可以操作的 UTC(自 1970 年 1 月 1 日以来的毫秒数)。

    然后您可以使用toISOString() 方法将UTC 转换为ISO 8601 扩展格式(2014-02-21T00:00:00.000Z)并获取T 之前的文本:

    var utcDate = new Date('Fri Feb 21 2014 00:00:00 GMT-0800');
    var isoExtendedDate = utcDate.toISOString();   
    var isoSimpleDate = isoExtendedDate.split("T")[0];
    

    【讨论】:

    • ES5 不需要实现来支持除 ISO 8601 版本之外的任何格式。其他格式的解析取决于实现
    【解决方案4】:

    我无法删除它,因为 OP 选择它作为答案(OP 请选择 Xotic750 的)答案。

    See Xotic750's answer

    【讨论】:

    • 你也需要填写月份和日期:)
    • @Archer 作为练习留给读者:)
    • 如果你有幸拥有一个能够正确解析该字符串的环境。
    • 解析非标准日期字符串完全依赖于实现,手动解析字符串要好得多。有一个返回全年的 getFullYear 方法。
    • -1。发帖人有足够的时间更新帖子,但由于依赖非标准解析而被否决,可能由于时区差异导致日期更改,使用 getYear 和没有正确格式化 2 位数值。
    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 2022-01-26
    • 2015-08-15
    • 1970-01-01
    • 2012-10-28
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多