从javascript中的时间字符串创建日期

时间:2010-09-14 07:48:16

标签: javascript time

我是javascript的新手,我正在尝试比较两个日期值,我正在以格式获取两个时间值字符串

06:30:47 AM

01:10:47 PM

我需要比较这些以找出第一个是否小于另一个。我无法弄清楚如何在javascript中执行此操作。可以帮助人吗? o.h

6 个答案:

答案 0 :(得分:2)

我不认为标准实现可以解析这个问题。我会做这样的事情:

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')) {
    // ...
}

答案 1 :(得分:1)

JavaScript的指定日期/时间解析,您可以依赖跨浏览器,这是非常有限的。很长一段时间,规范中没有规定任何单一的字符串日期格式,并且从最近的第5版规范开始,唯一的强制格式是ISO-8601(以及一些子集)。您还不能依赖已实现第5版规范部分的浏览器。

所以你有两个选择:

  1. 自己解析字符串并使用Date构造函数,该构造函数将日期的各个部分作为数字,例如new Date(year, month, day, hour, minute, second, ...)。 (您只需要根据需要指定多个,例如new Date(2010, 9, 14)即2010年9月14日。)

  2. 使用像Moment这样已经为您完成工作的库。 Moment允许您指定要解析的格式。

答案 2 :(得分:0)

使用Date对象。检查一下:http://www.w3schools.com/jsref/jsref_obj_date.asp

尝试将两个值放在Date变量中并执行以下操作:

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

答案 3 :(得分:0)

如果您的时间始终采用00:00:00 AM格式,那么

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
};

..应该是跨浏览器和时间/格式安全的。

答案 4 :(得分:0)

我试过这样的事情

var ts1 =“06:30:47 AM”;

var ts2 =“01:10:47 PM”;

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

var d1 =新日期(ds +“”+ ts1);

var d2 =新日期(ds +“”+ ts2);

if(!(d2&gt; d1)){

警告(“d1应小于d2”);

}

这有什么问题吗?

答案 5 :(得分:0)

// 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

作为奖励,您的时间现在与Date对象和其他时间计算更加兼容。