0

我在两个已经格式化为 hh:mm 的文本字段中有一个值,如何比较这两个字段的值?

我正在尝试以下代码:

function check_ToFromTime(toTime) {
    if (getControl('txtStartTimeFrom').value == '00:00' && getControl(toTime).value == '00:00') { return true; }
    var fromDate = new Date(getControl('txtStartTimeFrom').value);
    var toDate = new Date(getControl('txtEndTimeTo').value);

    var fromT = fromDate.getTime();
    var toT = toDate.getTime();
    return (toT >= fromT);
}

第一行中的 if 语句有效,但最后一条语句
返回 (toT >= fromT); 不起作用。它总是返回假。我哪里错了?

4

2 回答 2

0

我不会担心将这些String对象转换为Date对象。只需拆分字符串并进行比较:

var fromDate = "04:05";
var toDate = "04:04";
var fromTokens = fromDate.split(":");
var toTokens = toDate.split(":");
alert(fromTokens[0] < toTokens[0] || (fromTokens[0] == toTokens[0] && fromTokens[1] < toTokens[1]));

您可以将此功能放在一个很好的函数中以实现可重用性:

function isAfter(fromDate, toDate){
  var fromTokens = fromDate.split(":");
  var toTokens = toDate.split(":");
  return (fromTokens[0] < toTokens[0] || (fromTokens[0] == toTokens[0] && fromTokens[1] < toTokens[1]));
}

//Tests
alert(isAfter("04:04", "05:05"));
alert(isAfter("06:04", "05:05"));
alert(isAfter("05:05", "05:05"));

JS 小提琴:http: //jsfiddle.net/X5v5F/

我不打算沿着这条路线走,因为我认为拆分字符串就足够了,但是如果您确定了一个日期,我建议您使用 Moment.js。

于 2013-09-26T09:14:36.370 回答
0

它总是会打印假,因为结束时间总是大于开始时间。你需要改变条件,即返回(toT <= fromT);

于 2013-09-26T09:16:57.647 回答