【问题标题】:Javascript to compare two dates, from strings, begin <= endJavascript比较两个日期,从字符串开始<=结束
【发布时间】:2011-01-21 02:54:06
【问题描述】:

我得到两个格式为(巴西格式)的字符串:“DD/MM/YYYY”,我需要比较两者。由于第一个字段是开始,最后一个是结束,

我的验证开始

Date.new(begin) 即使在 ISO 上也会生成“无效日期”!

【问题讨论】:

    标签: javascript validation date


    【解决方案1】:

    不要使用Date.new。使用new Date()。由于日期字符串的格式,我建议单独获取每个字段并将它们传递给构造函数:

    var startYear = parseInt(document.getElementById('startYear'), 10);
    var startMonth = parseInt(document.getElementById('startMonth'), 10) - 1; // as per Residuum's comment
    var startDay = parseInt(document.getElementById('startDay'), 10);
    var start = new Date(startYear, startMonth, startDay);
    

    等等。如果您收到一个日期字符串,那么您可以使用模糊棒棒糖的方法从字符串中获取每个字段。但是,我不确定 Date 构造函数是否会接受各个字段的未解析字符串。

    一旦您有了想要比较的两个日期,只需比较它们自纪元以来的毫秒数:

    function isValid(start, end) {
        return start.getTime() < end.getTime();
    }
    

    【讨论】:

    • 在 Javascript 中月份是从零开始的,所以让它 startMonth = parseInt(document.getElementById('startMonth'), 10) - 1;
    • 好的,特别感谢本月 - 1 次观察。否则,所有 12 月的日期都会失败 =)
    【解决方案2】:

    有一个不错的日期处理库,名为 datejs,它有一个 parseExact(dateStr, format) 方法。

    【讨论】:

      【解决方案3】:

      您可以这样做,如果您知道您的日期将始终以 dd/mm/yyyy 相同的方式格式化

      today = "23/02/1001";
      dateComponents = today.split("/");
      date = new Date(dateComponents[2], dateComponents[1] - 1, dateComponents[0]);
      

      但更好的解决方案是查看此页面,Datejs 是日期处理的一个很好的替代方案。

      【讨论】:

      • 在 Javascript 中月份是从零开始的,所以让它 date = new Date(dateComponents[2], dateComponents[1] - 1, dateComponents[0]);
      【解决方案4】:

      又快又脏:

      function is_valid (start , end) {
           return start.split('/').reverse().join('') <= end.split('/').reverse().join('') ;
      }
      

      也就是说,将日期拆分为组件,将它们颠倒顺序再次加入并进行字符串比较。

      编辑:如评论中所述,如果您的月/日小于 10 没有填充零,这当然不起作用。

      【讨论】:

      • 日期格式字符串 dd/mm/yyyy 通常不采用零填充。如果日期组件并不总是零填充,这将不起作用。例如。 “2010 年 9 月 1 日”和“2010 年 10 月 1 日”。
      • 如果它没有填充,那么它将不起作用......对我来说,指示 dd 而不是 d 和 mm 而不是 m 表示 2 位数字,但我想不一定是这种情况。
      【解决方案5】:

      JS时代世界的新“热”:http://momentjs.com/ 也适合这个用例

      【讨论】:

        【解决方案6】:

        以下是 Javascript 中日期对象的所有可用构造函数:

        dateobject = new Date(); // returns date of current time stamp
                                 // on the browser
        dateobject = new Date("Month Day, Year Hours:Minutes:Seconds");
        dateobject = new Date(Year, Month, Day);
        dateobject = new Date(Year, Month, Day, Hours, Minutes, Seconds);
        dateobject = new Date(Milliseconds);
        

        选择你尝试使用的那个,但在你的情况下我会选择new Date(Year, Month, Day);

        编辑: 注意:Month在 Javascript 中从零开始,因此 2010 年 1 月 1 日将是 new Date(2010, 0, 1),2011 年 12 月 31 日是 new Date(2010, 11, 31)

        【讨论】:

        • 月份的东西是一个非常奇怪的 JS 怪癖,还有一些其他的怪癖,但如果你了解 JS,它会是一门非常好的语言。
        猜你喜欢
        • 2013-10-31
        • 2019-10-04
        • 2017-02-08
        • 2019-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-22
        相关资源
        最近更新 更多