jQuery/JS - How to compare two date/time stamps?

前端 未结 5 862
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-10 18:53

I have two date/time stamps:

d1 = 2011-03-02T15:30:18-08:00 
d2 = 2011-03-02T15:36:05-08:00

I want to be above to compare the two:

相关标签:
5条回答
  • 2020-12-10 19:29

    Your timestamps should be strings.

    var d1 = "2011-03-02T15:30:18-08:00";
    var d2 = "2011-03-02T15:36:05-08:00";
    
    if (new Date(d1) < new Date(d2)) {alert('newer')}
    

    Example: http://jsfiddle.net/hKPkF/

    0 讨论(0)
  • 2020-12-10 19:29

    Seems to work fine for me, although you have to format correctly (i.e. semicolons, quotes):

    var d1 = "2011-03-02T15:30:18-08:00";
    var d2 = "2011-03-02T15:36:05-08:00";
    
    if(new Date(d1) < new Date(d2)) {alert('newer')};
    

    And yes, it takes time into account. If you do this:

    alert(new Date(d1) - new Date(d2));
    

    You get 347000, which is 347 seconds, or 5 minutes, 47 seconds. This is the correct difference between the two.

    0 讨论(0)
  • 2020-12-10 19:32

    Given the differences in date formats and capability between browsers, I'd really reccomend you use a library devoted to DateTime handling. JS support for it is notoriously horrendous. I'm a HUGE fan of date.js

    http://www.datejs.com/

    0 讨论(0)
  • 2020-12-10 19:33

    You may be having trouble with the date string format. I am getting Invalid date if I do:

    new Date("2011-03-02T15:30:18-08:00");
    

    Here's what works for me on Chrome:

    var d1 = "Thu Mar 03 2011 00:53:54 GMT+0100 (CET)";
    var d2 = "Thu Mar 03 2011 03:53:54 GMT+0100 (CET)";
    
    if (new Date(d1) < new Date(d2)) {console.log('newer')}
    

    If you are working in ruby on the server side, you could convert to UTC from a Time object. Here it is, with a little massaging to convert to a format that is identical to javascript's Date object toUTCString method:

    tm = Time.new
    utc_tm = tm.getutc
    utc_tm.strftime("%a, %d %b %Y %H:%M:%S GMT")
    

    Output: "Thu, 03 Mar 2011 00:46:55 GMT"

    0 讨论(0)
  • 2020-12-10 19:37

    var d1= '2011-03-02T15:30:18-08:00', d2= '2011-03-02T15:36:05-08:00'; Some browsers can convert an ISO string to a Date, with new Date or Date.parse.

    A lot of browsers in use today cannot-you may need to write your own conversion.

    This one seems to work, but it'll need refining. I added a shim for browsers that don't have an array.map, based on mozilla org's public code.

    Date.fromISO= function(s){
        var day, tz, 
        rx=  /^(\d{4}\-\d\d\-\d\d([tT][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/, 
        p= rx.exec(s) || [];
        if(p[1]){
            day= p[1].split(/\D/).map(function(itm){
                return parseInt(itm, 10) || 0;
            });
            day[1]-= 1;
            day= new Date(Date.UTC.apply(Date, day));
            if(!day.getDate()) return NaN;
            if(p[5]){
                tz= parseInt(p[5], 10)*60;
                if(p[6]) tz += parseInt(p[6], 10);
                if(p[4]== "+") tz*= -1;
                if(tz) day.setUTCMinutes(day.getUTCMinutes()+ tz);
            }
            return day;
        }
        return NaN;
    }
    Array.prototype.map= Array.prototype.map || function(fun, scope){
        var L= this.length, A= [], i= 0;
        if(typeof fun== 'function'){
            while(i< L){
                if(i in this) A[i]= fun.call(scope, this[i], i, this);
                ++i;
            }
            return A;
        }
    }
    var d1= '2011-03-02T15:30:18-08:00', d2= '2011-03-02T15:36:05-08:00';
    alert(Date.fromISO(d1)-Date.fromISO(d2)+' milliseconds')
    
    0 讨论(0)
提交回复
热议问题