creating date from a timestring in javascript

非 Y 不嫁゛ 提交于 2021-02-05 07:16:57

问题


I am new to javascript and am trying to compare two date values ,I am getting two time value strings in the format

06:30:47 AM

01:10:47 PM

I need to compare these to find out if the first one is less than the other.I couldn't figure out how to do this in javascript.Can someone help? o.h


回答1:


I do not think that the standard implementation can parse this. I would do something like this:

function toDate(dateString) {
    var timeComponents = dateString.replace(/\s.*$/, '').split(':');

    if (dateString.indexOf("PM") > -1) {
       timeComponents[0] += 12;
    }

    var date = new Date();
    date.setHours(timeComponents[0]);
    date.setMinutes(timeComponents[1]);
    date.setSeconds(timeComponents[2]);

    return date;
}

if (toDate('06:30:47 AM') > toDate('01:10:47 PM')) {
    // ...
}



回答2:


JavaScript's specified date/time parsing, what you can rely upon cross-browser, is surprisingly limited. For a long time, there was no single string date format that was mandated in the spec, and as of the recent 5th edition spec, the only mandated format is ISO-8601 (and some subsets). You can't yet rely on browsers having implemented that part of the 5th edition spec.

So you have a couple of choices:

  1. Parse the string yourself and use the Date constructor that takes the individual parts of the date as numbers, e.g. new Date(year, month, day, hour, minute, second, ...). (You need only specify as many of those as you want, so for instance new Date(2010, 9, 14) is September 14th, 2010.)

  2. Use a library like Moment that's already done the work for you. Moment lets you specify the format to parse.




回答3:


Use the Date object. Check this: http://www.w3schools.com/jsref/jsref_obj_date.asp

Try putting the two values in Date variables and do this:

if(var1.valueOf() > var2.valueOf())
{
  //Do Something
}



回答4:


If your times are always in the format 00:00:00 AM then

var a="06:30:47 AM";
var b="01:10:47 PM";

var at=parseInt(a.substring(0,8).replace(/(^0+|:)/g,""));
var bt=parseInt(b.substring(0,8).replace(/(^0+|:)/g,""));

if (a.charAt(9)=="P") {at=at+120000};
if (b.charAt(9)=="P") {bt=bt+120000};

if (at<bt) {
    // a is smaller
}
else
{
    // a is not smaller
};

..should be cross-browser and time/format safe.




回答5:


I tried something like this

var ts1="06:30:47 AM";

var ts2="01:10:47 PM";

var ds=new Date().toDateString();

var d1=new Date(ds+" "+ts1);

var d2=new Date(ds+" "+ts2);

if (!(d2>d1)){

alert("d1 should be less than d2");

}

Is there something wrong with this?




回答6:


// specific formatter for the time format ##:##:## #M
var formatToMiliseconds = function(t){
    t = t.split(/[:\s]/);
    t = ((t[0] * 3600000) + (t[1] * 60000) * (t[2] * 1000)); // To ms
    t = t + (/PM/i.test(t[3]) ? 43200000 : 0); // adjust for AM/PM
    return t;
}

var time01 = formatToMiliseconds('06:30:47 AM');
var time02 = formatToMiliseconds('01:10:47 PM');

alert(time01 > time02); // false
allert(time01 < time02); // true

As a bonus, your time is now more compatible with the Date object and other time calculations.



来源:https://stackoverflow.com/questions/3706959/creating-date-from-a-timestring-in-javascript

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!