【问题标题】:Javascript datetime issueJavascript日期时间问题
【发布时间】:2013-12-02 07:30:06
【问题描述】:

我有一个代码,它将开始日期 toUTCString 和结束日期 toUTCString 存储在一个表中。 当我在控制台中调试代码时,javascript 显示出一些奇怪的行为。

控制台输出

 var startdate = new Date($("#smdatestart").val()).toUTCString();
 var enddate = new Date($("#smdateend").val()).toUTCString();
 var now = new Date();
 var currUTCDate = now.toUTCString();//current datetime
startdate //starting date
"Mon, 02 Dec 2013 07:30:00 GMT" //in UTC
currUTCDate // current date
"Mon, 02 Dec 2013 07:15:16 GMT"  //in UTC
enddate // ending date
"Sun, 01 Dec 2013 18:30:00 GMT" //in UTC


currUTCDate > enddate //should be true but showing false
false
startdate > enddate //should be true but showing false
false
startdate > currUTCDate // this output is correct
true

【问题讨论】:

  • 这些值是实际的Date 对象还是字符串?
  • 我编辑了我的问题。
  • 实际上 ($("#smdateend").val() 中的值是什么
  • 嗯,这些字符串的格式不可以使它们具有可比性。它们从工作日开始,即字符串的顺序由工作日的顺序决定。可比较的格式根本不包含工作日,并且需要像YYYY-MM-DD HH:MM:SS 这样的格式。 Compare the time value of the date objects,不是字符串。
  • startdateenddatecurrUTCDate 中的值是字符串,而不是日期对象。您实际上是按字母顺序比较日期的字符串表示形式,而不是比较实际的日期。

标签: javascript datetime utc


【解决方案1】:
var startdate = new Date('Mon, 02 Dec 2013 07:30:00 GMT');
var enddate = new Date('Sun, 01 Dec 2013 18:30:00 GMT');
var currUTCDate = new Date('Mon, 02 Dec 2013 07:15:16 GMT');

startdate > enddate // true

currUTCDate > enddate // true

任何涉及'=' 的内容都应使用'+' 前缀。然后它将比较 dates millisecond 的值。

+startdate  <= +currUTCDate ;  => true
+startdate >= +currUTCDate ;  => true
+startdate === +currUTCDate ; => true

【讨论】:

    【解决方案2】:

    我建议您首先以日期格式比较日期。如果条件满足,则将数据转换为utcstring并根据需要进行存储。

    【讨论】:

      【解决方案3】:

      当使用 == 或 != 或 > 或 使用下面的代码进行比较

      if ( Date.parse ( currentdate) > Date.parse ( enddate) ) {
          // your code
      }
      

      【讨论】:

        猜你喜欢
        • 2021-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-24
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        相关资源
        最近更新 更多