我有来自我所访问的日期选择器的日期 -
var transdate = $j("input[name='enterdate']").val();
Run Code Online (Sandbox Code Playgroud)
导致 transdate = "6/22/2015"
我需要测试输入的日期是否在定义为startdate = '2015-02-01'和的两个日期之间
enddate = '2015-07-30'
如何在以下代码中转换yyyy-mm-dd格式的transdate -
if ((new Date('transdate')>= startdate ) && (new Date('transdate') <= enddate )) {
alert("correct date entered");
}
Run Code Online (Sandbox Code Playgroud)
字符串不是唯一定义为由Date对象处理的格式.这意味着你必须解析它(使用正则表达式或String#split其他),或使用像MomentJS这样的库来解析它.解析完日期后,您可以将它们与<或>等进行比较.
不要依赖于Date解析未定义解析的字符串.您将遇到无法工作的实现或区域设置.
"6/22/2015" 使用正则表达式解析是微不足道的:
var rex = /^(\d+)\/(\d+)\/(\d+)$/;
var match = rex.exec(transdate);
var dt = match ? new Date(+match[3], +match[1] - 1, +match[2]) : null;
Run Code Online (Sandbox Code Playgroud)
它使用Date接受日期部分的构造函数作为单独的数字参数(年,月,日).该+字符串转换为数字.该[x]是从正则表达式捕获组.您必须从月中减去一个因为几个月从0JavaScript 开始.
Moment.js是一个方便的日期工具库,使这很容易.
moment('6/22/2015', 'M/D/YYYY')
.isBetween('2015-02-01', '2015-07-30'); // => true
Run Code Online (Sandbox Code Playgroud)
请注意,只有第一个(美国格式)日期字符串需要提供显式格式字符串.
时刻可以单独用于解析,例如.即使不使用isBetween:
var transdate = moment('6/22/2015', 'M/D/YYYY').toDate();
var startdate = moment('2015-02-01').toDate();
var enddate = moment('2015-07-30').toDate();
transdate >= startdate && transdate <= enddate // => true
Run Code Online (Sandbox Code Playgroud)