【问题标题】:How to convert date to timestamp?如何将日期转换为时间戳?
【发布时间】:2012-04-10 00:28:33
【问题描述】:

我想将日期转换为时间戳,我的输入是26-02-2012。我用过

new Date(myDate).getTime();

上面写着 NaN.. 谁能告诉我如何转换它?

【问题讨论】:

  • 你可能想看看 date.js 库:datejs.com
  • 您是否使用了Date(myDate).getTime()(您标记为代码的内容),或者它之前的“新”一词是否意味着成为代码的一部分?你付出的努力越多,得到的答案就会越好。
  • @rsbarro:除了它似乎不再被维护(并且有突出的错误)。不过MomentJS 看起来还不错。
  • @T.J.Crowder 我使用过 date.js,它可以满足我的需要,但你是对的,它已经有一段时间没有被积极地使用了。我会检查一下momentjs。谢谢!

标签: javascript date time


【解决方案1】:

如果您还需要添加时间,这会解决问题 new Date('2021-07-22 07:47:05.842442+00').getTime()

这也可以在没有时间的情况下工作 new Date('2021-07-22 07:47:05.842442+00').getTime()

这也可以,但不会接受时间 new Date('2021/07/22').getTime()

最后,如果一切都不起作用,请使用这个 new Date(year, month, day, hours, minutes, seconds, milliseconds)

注意月份,计数从0 开始,所以Jan === 0Dec === 11

【讨论】:

    【解决方案2】:

    第一个答案很好,但是使用 react typescript 会因为 split('') 而抱怨 对我来说,效果更好的方法是。

    parseInt((new Date("2021-07-22").getTime() / 1000).toFixed(0))
    
    

    乐于助人。

    【讨论】:

      【解决方案3】:

      您只需将日期数字反转并将- 更改为,

      new Date(2012,01,26).getTime(); // 02 becomes 01 because getMonth() method returns the month (from 0 to 11)
      

      在你的情况下:

      var myDate="26-02-2012";
      myDate=myDate.split("-");
      new Date(parseInt(myDate[2], 10), parseInt(myDate[1], 10) - 1 , parseInt(myDate[0]), 10).getTime();
      

      附:英国语言环境在这里无关紧要。

      【讨论】:

      • 该日期格式也是无效的,并且不能可靠地跨浏览器和跨语言环境工作(例如,对于我在英国语言环境的 Chrome 中它不起作用)。如果您要建议一种格式,请建议一种实际记录在案的格式。
      • 我从developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… 得到示例。我只是忘了把绳子收起来。现在可以了。
      • 好的,至少现在上面的代码没有使用无效的日期格式——它只是给出了错误的日期,原因有两个。上面您已经定义了 2014 年 3 月 2 日的日期(您的字段顺序搞砸了)。如果这些字段的顺序正确,您将定义日期 March 2012 年 26 日(月份值从零开始)。但由于 OP 有一个字符串,而不是一系列数字,因此即使您解决了这些问题,它也不是那么有用。
      • @T.J.克劳德感谢您的建议。正如你所说的将字符串转换为数字,我修复了代码。谢谢。
      • 第一个代码示例仍然错误,并且在以0 开头的字符串上使用Number 在某些引擎上会出现问题——使用parseInt 并指定一个基数。
      【解决方案4】:

      如果您来这里寻找当前时间戳

      var date      = new Date();
      var timestamp = date.getTime();
      

      或者干脆

      new Date().getTime();
      //console.log(new Date().getTime());
      

      【讨论】:

        【解决方案5】:

        它应该是这个标准的日期格式 YYYY-MM-DD,使用下面的公式。您可能有时间,例如:2020-04-24 16:51:56 或 2020-04-24T16:51:56+05:30。它可以正常工作,但日期格式应该只像这个 YYYY-MM-DD。

        var myDate = "2020-04-24";
        var timestamp = +new Date(myDate)
        

        【讨论】:

          【解决方案6】:

          只需对Date 对象执行一些算术运算,就会以number 的形式返回时间戳。这对于紧凑符号很有用。我发现这是最容易记住的方法,因为该方法还可以将转换为 string 类型的数字转换回 number 类型。

          let d = new Date();
          console.log(d, d * 1);

          【讨论】:

            【解决方案7】:

            以下代码会将当前日期转换为时间戳。

            var currentTimeStamp = Date.parse(new Date());
            console.log(currentTimeStamp);
            

            【讨论】:

            • 在 Stack Overflow 上不鼓励仅使用代码的答案,因为它们没有解释它如何解决问题。请编辑您的答案以解释此代码的作用以及它如何回答问题,以便它对 OP 以及其他有类似问题的用户有用。
            【解决方案8】:

            将字符串拆分成多个部分并直接提供给 Date 构造函数:

            更新:

            var myDate = "26-02-2012";
            myDate = myDate.split("-");
            var newDate = new Date( myDate[2], myDate[1] - 1, myDate[0]);
            console.log(newDate.getTime());

            【讨论】:

            • 不幸的是,这在 Safari5 中不起作用,因为它返回 NaN。在 Safari 中,您必须使用其他可能的构造函数 new Date(year, month, day);,关于此示例:new Date(myDate[2], myDate[1], myDate[0]);
            • 不要将日期字符串从“欧洲”格式转换为“美国”格式,最好将其转换为ISO 8601格式(YYYY-MM-DD),保证Date()可以理解,一般而言,它是日期字符串最具互操作性的格式。
            • 注意:new Date(newDate).getTime() 会生成毫秒分辨率的时间戳。
            • 秒用:Math.floor(new Date(newDate).getTime() / 1000)
            • 来吧,他们真的应该考虑一个更好的命名而不是 getTime()!
            【解决方案9】:

            对于那些想要yyyymmddHHMMSS格式的可读时间戳的人

            > (new Date()).toISOString().replace(/[^\d]/g,'')              // "20190220044724404"
            > (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -3) // "20190220044724"
            > (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -9) // "20190220"
            

            使用示例:备份文件扩展名。 /my/path/my.file.js.20190220

            【讨论】:

            • 请注意,toISOString 会将您的日期转换为 UTC,因此可能并不总是有理想的结果。
            【解决方案10】:

            其他开发人员已提供了答案,但以我自己的方式,您可以即时执行此操作,而无需创建任何用户定义的函数,如下所示:

            var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
            alert(timestamp); // returns 1330214400000
            

            【讨论】:

              【解决方案11】:

              为了将 (ISO) 日期转换为 Unix 时间戳,我最终得到的时间戳比需要的长 3 个字符,所以我的年份大约是 50k...

              我必须除以 1000: new Date('2012-02-26').getTime() / 1000

              【讨论】:

                【解决方案12】:

                这里有两个问题。 首先,您只能在日期实例上调用 getTime。您需要将新日期括在括号中或将其分配给变量。

                其次,你需要以适当的格式传递一个字符串。

                工作示例:

                (new Date("2012-02-26")).getTime();
                

                【讨论】:

                • 无需将日期瞬间括在括号中。只需要正确的字符串格式。
                【解决方案13】:

                试试这个函数,它使用Date.parse()方法,不需要任何自定义逻辑:

                function toTimestamp(strDate){
                   var datum = Date.parse(strDate);
                   return datum/1000;
                }
                alert(toTimestamp('02/13/2009 23:31:30'));
                

                【讨论】:

                【解决方案14】:

                这个重构的代码可以做到这一点

                let toTimestamp = strDate => Date.parse(strDate)
                

                这适用于除 ie8 之外的所有现代浏览器-

                【讨论】:

                  【解决方案15】:
                  /**
                   * Date to timestamp
                   * @param  string template
                   * @param  string date
                   * @return string
                   * @example         datetotime("d-m-Y", "26-02-2012") return 1330207200000
                   */
                  function datetotime(template, date){
                      date = date.split( template[1] );
                      template = template.split( template[1] );
                      date = date[ template.indexOf('m') ]
                          + "/" + date[ template.indexOf('d') ]
                          + "/" + date[ template.indexOf('Y') ];
                  
                      return (new Date(date).getTime());
                  }
                  

                  【讨论】:

                    【解决方案16】:
                    function getTimeStamp() {
                           var now = new Date();
                           return ((now.getMonth() + 1) + '/' + (now.getDate()) + '/' + now.getFullYear() + " " + now.getHours() + ':'
                                         + ((now.getMinutes() < 10) ? ("0" + now.getMinutes()) : (now.getMinutes())) + ':' + ((now.getSeconds() < 10) ? ("0" + now
                                         .getSeconds()) : (now.getSeconds())));
                    }
                    

                    【讨论】:

                      【解决方案17】:

                      您的字符串不是Date 对象为specified to handle 的格式。您必须自己解析它,使用日期解析库,如 MomentJS 或更旧的(据我所知目前尚未维护)DateJS,或将其调整为正确的格式(例如,@987654325 @) 在要求 Date 解析它之前。

                      为什么你会得到NaN:当你要求new Date(...) 处理一个无效的字符串时,它会返回一个设置为无效日期的Date 对象(new Date("29-02-2012").toString() 返回"Invalid date")。在此状态下对日期对象调用 getTime() 会返回 NaN

                      【讨论】:

                      • @benvds:很酷,谢谢。虽然我发现评论 “此外,它对 DOM 没有破坏性” 有点奇怪......我希望他们的意思是它不会改变 Date 对象(它有与 DOM 无关)。
                      猜你喜欢
                      • 2019-08-24
                      • 2016-11-26
                      • 2019-04-03
                      • 1970-01-01
                      • 2020-10-19
                      • 1970-01-01
                      相关资源
                      最近更新 更多