【问题标题】:Converting a string formatted YYYYMMDDHHMMSS into a JavaScript Date object将格式为 YYYYMMDDHHMMSS 的字符串转换为 JavaScript 日期对象
【发布时间】:2009-12-02 16:04:56
【问题描述】:

我有一个带有日期的字符串,格式如下:YYYYMMDDHHMMSS。我想知道如何使用 JavaScript 将其转换为 JavaScript Date 对象。

提前致谢!

【问题讨论】:

    标签: javascript datetime date


    【解决方案1】:

    用一种古怪的方式来做这件事怎么样:

    var date = new Date(myStr.replace(
        /^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/,
        '$4:$5:$6 $2/$3/$1'
    ));
    

    零外部库,一行代码;-)


    原方法说明:

    // EDIT: this doesn't work! see below.
    var date = Date.apply(
        null,
        myStr.match(/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/).slice(1)
    );
    

    match() 函数(在它被 slice()d 包含后)将返回一个包含年、月、日、小时、分钟和秒的数组。这恰好是 Date 构造函数的正确顺序。 Function.apply 是一种使用数组中的参数调用函数的方法,所以我使用了Date.apply(<that array>)

    例如:

    var foo = function(a, b, c) { };
    
    // the following two snippets are functionally equivalent
    foo('A', 'B', 'C')
    
    var arr = ['A', 'B', 'C'];
    foo.apply(null, arr);
    

    我刚刚意识到这个函数实际上不起作用,因为 javascript 月份是零索引的。你仍然可以用类似的方法来做,但是会有一个中间步骤,在将数组传递给构造函数之前从数组中减去一个。我把它留在这里了,因为它是在 cmets 中被问到的。

    但是,另一个选项按预期工作。

    【讨论】:

    • 你能解释一下第一种情况是怎么回事吗? “申请”在做什么?
    • 这就是我的做法。除非您需要一堆其他日期处理,否则这些外部库是多余的。
    • 第一个版本不应该工作:根据 ECMA-262,第 3 版,第 15.9.2 节,将Date() 作为函数调用(即没有new)总是返回一个字符串表示当前时间;引用:“提供的任何参数都被接受但完全被忽略”
    • apply() 的参数即使有效也是错误的:正确的用法是 Date.apply(null, myStr.match(/.../).slice(1))
    • @Christoph:是的,你是对的。即便如此,这种方法也存在其他问题。在我的(显然是简短的)测试中,Date.apply 确实如我所愿。
    【解决方案2】:

    原始版本:

    new Date(foo.slice(0, 4), foo.slice(4, 6) - 1, foo.slice(6, 8),
        foo.slice(8, 10), foo.slice(10, 12), foo.slice(12, 14))
    

    不需要将字符串显式转换为数字:Date() 函数会为您完成这项工作。

    【讨论】:

      【解决方案3】:

      我发现DateJS 是处理与 JavaScript 中的日期转换、解析和使用有关的任何事情的最佳库。如果您更频繁地需要这种转换,您真的应该考虑在您的应用程序中使用它:

      Date.parseExact("20091202051200", "YYYYMMDDHHMMSS");
      

      【讨论】:

        【解决方案4】:

        如果你可以使用 jQuery,jQuery.ui.datepicker 有一个实用程序 function

        【讨论】:

          【解决方案5】:

          这个库中的日期函数可以提供帮助:http://javascripttoolbox.com/lib/date/,它是免费的并且使用起来非常简单。

          如果你想自己做,我建议查找 javascript 正则表达式,因为我想这是实现这一目标的最佳方式

          【讨论】:

            【解决方案6】:

            您的字符串中没有时区信息。 最有可能是格林威治标准时间,因此应该考虑到这一点 当你做日期。您可以使用简单的 javascript 方法轻松完成转换。

            Date.Brit= (function(){
                return Date.parse('2/6/2009')> Date.parse('6/2/2009');
            })()
            
            
            var s= "20091202093000"
            var D= s.match(/(\d{2})/g);
            if(Date.Brit){
                D.splice(2, 2, D[3],D[2]);
            }
            var day= new Date(Date.parse(D[2]+'/'+D[3]+'/'+
            D[0]+D[1]+' '+D.splice(4).join(':')+' GMT'));
            
            day.toUTCString()+'\n'+day
            
            
            /*  returned value: (String)
            Wed, 02 Dec 2009 09:30:00 GMT
            Wed Dec 02 2009 04:30:00 GMT-0500 (Eastern Standard Time)
            */
            

            【讨论】:

              猜你喜欢
              • 2019-01-31
              • 2018-12-05
              • 1970-01-01
              • 1970-01-01
              • 2018-09-29
              • 1970-01-01
              • 2011-03-07
              • 2022-07-20
              • 2013-12-28
              相关资源
              最近更新 更多