【问题标题】:Conversion of date into long format, How it works?将日期转换为长格式,它是如何工作的?
【发布时间】:2013-10-07 12:28:59
【问题描述】:

我试图将日期对象转换为长格式(可能是毫秒格式),就像我们在 java 中所做的那样。
因此,为了满足我的需求,经过反复试验,我找到了以下适合我的方法:

var date = new Date();  
var longFormat = date*1;  // dont know what it does internally
console.log(longFormat); // output was 1380625095292  

为了验证,我使用new Date(longFormat); 反转它,它给了我正确的输出。简而言之,我能够以某种方式满足我的需求,但我仍然对乘法内部的作用一无所知?当我试图将当前日期与数字 2 相乘时,它给了我 2057 年的某个日期!有谁知道,到底发生了什么?

【问题讨论】:

标签: javascript


【解决方案1】:

长格式在 01.01.1970 之后显示 the number of ticks,所以现在大约 43 年。

毫秒数翻倍 - 再增加 43 年,因此是 2057 年(左右)。

【讨论】:

    【解决方案2】:

    当你乘法时,你得到的是滴答声

    访问:How to convert JavaScript date object into ticks

    另外,当你* 2它时,你会得到双倍的刻度值,所以日期是未来的

    var date = new Date()
    var ticks = date.getTime()
    

    ref: Javascript Date Ticks

    getTime 返回自 1970 年 1 月 1 日以来的毫秒数。所以当你 * 1 它时,你可能已经得到了这个毫秒的值。当你 * 2 它时,这些毫秒会翻倍,你会得到 2057 年的日期!!

    【讨论】:

      【解决方案3】:

      日期在内部存储为时间戳,它是一个长对象 (more info on timestamps)。这就是您可以使用新日期(长)创建日期的原因。如果您尝试将 Date 与整数相乘,会发生以下情况:

          var date = new Date();
          var longFormat = date*1;
          // date*1 => date.getTime() * 1
      
          console.log(longFormat); // output is 1380.....
      

      Javascript 试图找到从日期到可以乘以因子 1 的格式的最简单转换,在这种情况下是内部长格式

      【讨论】:

        【解决方案4】:

        只需使用日期对象方法。

        阅读文档:JavaScript Date object

        var miliseconds=yourDateObject.getMiliseconds();
        

        如果你想得到滴答声:

        var ticks = ((yourDateObject.getTime() * 10000) + 621355968000000000);
        

        var ticks = someDate.getTime();
        

        【讨论】:

          【解决方案5】:

          Javascript 日期对象基于 UTC time value,即自 1970 年 1 月 1 日以来的毫秒数。恰巧Java 使用相同的纪元,但时间值是秒。

          要获取时间值,可以使用getTime方法,也可以对日期对象进行数学运算,例如

          var d = new Date();
          alert(d.getTime());  // shows time value
          alert(+d);           // shows time value
          

          Date 构造函数还接受时间值作为创建日期对象的参数,因此要复制日期对象,您可以这样做:

          var d2 = new Date(+d);
          

          如果你这样做:

          var d3 = new Date(2 * d);
          

          您实际上是在(非常粗略地)创建一个日期:

          1970 + (2013 - 1970) * 2 = 2056
          

          【讨论】:

            【解决方案6】:

            你可以试试Date constructorparsing functionality,然后你可以stringify

            >

             new Date("04/06/13").toString()
            "Sun Apr 06 1913 00:00:00 GMT+0200"
            

            // 什么的 但是解析是依赖于实现的,不会有很多引擎能正确解释你奇怪的 DD/MM/YY 格式。如果您使用的是 MM/DD/YYYY,它可能会在任何地方都被识别出来。

            相反,您想确保它是如何解析的,所以必须自己做,并将单个部分输入构造函数:

            var parts = "04/06/13".split("/"),
                date = new Date(+parts[2]+2000, parts[1]-1, +parts[0]);
            console.log(date.toString()); // Tue Jun 04 2013 00:00:00 GMT+0200
            

            【讨论】:

            • 为什么会被否决?为我工作...只需将“刻度”传递给new Date(ticks).toString();
            猜你喜欢
            • 2022-01-25
            • 1970-01-01
            • 2014-02-25
            • 2018-07-19
            • 1970-01-01
            • 1970-01-01
            • 2021-11-20
            • 2018-02-12
            • 1970-01-01
            相关资源
            最近更新 更多