【发布时间】:2010-09-14 07:48:16
【问题描述】:
我是 javascript 新手,正在尝试比较两个日期值,我得到两个格式的时间值字符串
06:30:47 上午
01:10:47 下午
我需要比较这些以确定第一个是否小于另一个。我不知道如何在 javascript 中执行此操作。有人可以帮忙吗? 哦.h
【问题讨论】:
标签: javascript time
我是 javascript 新手,正在尝试比较两个日期值,我得到两个格式的时间值字符串
06:30:47 上午
01:10:47 下午
我需要比较这些以确定第一个是否小于另一个。我不知道如何在 javascript 中执行此操作。有人可以帮忙吗? 哦.h
【问题讨论】:
标签: javascript time
我不认为标准实现可以解析这个。我会这样做:
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')) {
// ...
}
【讨论】:
JavaScript 的指定 日期/时间解析(您可以依赖的跨浏览器)非常有限。很长一段时间以来,规范中没有强制要求单一的字符串日期格式,并且在最近的第 5 版规范中,唯一强制的格式是 ISO-8601(和一些子集)。您还不能依赖已实现第 5 版规范的该部分的浏览器。
所以你有几个选择:
自己解析字符串并使用 Date 构造函数,它将日期的各个部分作为数字,例如new Date(year, month, day, hour, minute, second, ...)。 (您只需指定所需数量,例如 new Date(2010, 9, 14) 是 2010 年 9 月 14 日。)
使用像 Moment 这样已经为您完成工作的库。 Moment 允许您指定要解析的格式。
【讨论】:
使用日期对象。检查这个:http://www.w3schools.com/jsref/jsref_obj_date.asp
尝试将这两个值放入 Date 变量中并执行以下操作:
if(var1.valueOf() > var2.valueOf())
{
//Do Something
}
【讨论】:
如果您的时间始终采用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
};
..应该是跨浏览器和时间/格式安全的。
【讨论】:
我试过这样的
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);
如果 (!(d2>d1)){
alert("d1 应该小于 d2");
}
这有什么问题吗?
【讨论】:
// 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 对象和其他时间计算更加兼容。
【讨论】: