Validate two dates of this “dd-MMM-yyyy” format in javascript

前端 未结 5 1454
时光取名叫无心
时光取名叫无心 2020-12-21 08:33

I have two dates 18-Aug-2010 and 19-Aug-2010 of this format. How to find whether which date is greater?

相关标签:
5条回答
  • 2020-12-21 08:57

    You can do the parsing manually, for your given format, but I'd suggest you use the date.js library to parse the dates to Date objects and then compare. Check it out, its awesome!

    And moreover, its a great addition to your js utility toolbox.

    0 讨论(0)
  • 2020-12-21 08:59

    You will need to create a custom parsing function to handle the format you want, and get date objects to compare, for example:

    function customParse(str) {
      var months = ['Jan','Feb','Mar','Apr','May','Jun',
                    'Jul','Aug','Sep','Oct','Nov','Dec'],
          n = months.length, re = /(\d{2})-([a-z]{3})-(\d{4})/i, matches;
    
      while(n--) { months[months[n]]=n; } // map month names to their index :)
    
      matches = str.match(re); // extract date parts from string
    
      return new Date(matches[3], months[matches[2]], matches[1]);
    }
    
    customParse("18-Aug-2010");
    // "Wed Aug 18 2010 00:00:00"
    
    customParse("19-Aug-2010") > customParse("18-Aug-2010");
    // true
    
    0 讨论(0)
  • 2020-12-21 09:03

    Update: IE10, FX30 (and likely more) will understand "18 Aug 2010" without the dashes - Chrome handles either

    so Date.parse("18-Aug-2010".replace("/-/g," ")) works in these browsers (and more)

    Live Demo

    Hence

    function compareDates(str1,str2) {
      var d1 = Date.parse(str1.replace("/-/g," ")),
          d2 = Date.parse(str2.replace("/-/g," "));
      return d1<d2;
    }
    
    0 讨论(0)
  • 2020-12-21 09:13

    The native Date can parse "MMM+ dd yyyy", which gives:

    function parseDMY(s){
      return new Date(s.replace(/^(\d+)\W+(\w+)\W+/, '$2 $1 '));
    }
    +parseDMY('19-August-2010') == +new Date(2010, 7, 19) // true
    parseDMY('18-Aug-2010') < parseDMY('19-Aug-2010')     // true
    
    0 讨论(0)
  • 2020-12-21 09:16

    Firstly, the 'dd-MMM-yyyy' format isn't an accepted input format of the Date constructor (it returns an "invalid date" object) so we need to parse this ourselves. Let's write a function to return a Date object from a string in this format.

    function parseMyDate(s) {
        var m = ['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'];
        var match = s.match(/(\d+)-([^.]+)-(\d+)/);
        var date = match[1];
        var monthText = match[2];
        var year = match[3];
        var month = m.indexOf(monthText.toLowerCase());
        return new Date(year, month, date);
    }

    Date objects implicitly typecast to a number (milliseconds since 1970; epoch time) so you can compare using normal comparison operators:

    if (parseMyDate(date1) > parseMyDate(date2)) ...
    0 讨论(0)
提交回复
热议问题