jQuery检查start_date是否大于end_date

时间:2016-06-22 07:27:11

标签: javascript jquery

我有以下问题。

我从HTML表单中获取start_date和end_date,这两个日期都有效,并由引导日期选择器输入/选择。

日期的一个例子如下

start_date = 15-06-2016
end_date = 14-06-2016

我有以下代码来检查开始日期是否大于结束日期:

if (Date.parse(start_date) > Date.parse(end_date))
{
    error = true;
    console.log('start date is greater than end date');
}
else
{
    console.log('start date is smaller than end date');
}

开始日期大于结束日期,但在我的验证中,始终是日志"开始日期小于结束日期"

我还在条件语句中尝试了以下内容,但仍然得到相同的结果:

if (new Date(start_date) > new Date(end_date))
if (start.Date > date.Date)

如果我切换">"使用"<",我仍然得到相同的结果。该语句总是执行else语句。

我认为从字符串到日期的转换可能是问题所在。

提前致谢

5 个答案:

答案 0 :(得分:3)

Date.parse无法识别此日期格式。

console.log(Date.parse('15-06-2016'));

如果您希望识别它,则需要使用mm/dd/yyyy格式或yyyy-mm-dd格式。

console.log(Date.parse('06/15/2016'));

如果您想使用自定义格式,则必须实现自己的解析器(例如'-'上的splitting)或使用moment.js等库。

console.log(moment("06-15-2016", "MM-DD-YYYY"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>

答案 1 :(得分:1)

您可以使用String.prototype.split()Array.prototype.reverse()Array.prototype.join()new Date().getTime()

&#13;
&#13;
var start_date = "15-06-2016"
, end_date = "14-06-2016";

function getTime(d) {
  return new Date(d.split("-").reverse().join("-")).getTime()
}

console.log(getTime(start_date) > getTime(end_date))
&#13;
&#13;
&#13;

答案 2 :(得分:0)

而不是

start_date = 15-06-2016
end_date = 14-06-2016

使用

var start_date = new Date('15-06-2016');
var end_date = new Date('14-06-2016');

其余代码保持不变。

答案 3 :(得分:0)

首先尝试将日期格式转换为标准JavaScript日期格式,如YYYY-MM-DD,然后您可以将其解析为Date对象。完成后,您可以进行如下所需的比较:

标准日期格式可在以下链接中找到:http://www.w3schools.com/js/js_date_formats.asp

&#13;
&#13;
var start_date = '15-06-2016';
var end_date = '14-06-2016';

//convert to standard date format like YYYY-MM-DD
start_date = 
  start_date.split('-')[2]+"-"+start_date.split('-')[1]+"-"+start_date.split('-')[0]

end_date = 
  end_date.split('-')[2]+"-"+end_date.split('-')[1]+"-"+end_date.split('-')[0]

if (Date.parse(start_date) > Date.parse(end_date))
{
    error = true;
    console.log('start date is greater than end date');
}
else
{
    console.log('start date is smaller than end date');
}
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您还可以通过javascript隐藏所选日期的先前日期。

HTML:

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css" type="text/css" media="all"><label for="from">From</label> <input type="text" id="from" name="from"/> <label for="to">to</label> <input type="text" id="to" name="to"/>

Javascript:

var dateToday = new Date(); var dates = $("#from, #to").datepicker({
defaultDate: "+1w",
changeMonth: true,
numberOfMonths: 3,
minDate: dateToday,
onSelect: function(selectedDate) {
    var option = this.id == "from" ? "minDate" : "maxDate",
        instance = $(this).data("datepicker"),
        date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
    dates.not(this).datepicker("option", option, date);
}   });

这是一个有效的Demo