Javascript - 将字符串转换为日期并比较日期

Kau*_*aur 2 javascript date

我有来自我所访问的日期选择器的日期 -

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)

T.J*_*der 7

字符串不是唯一定义为由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 开始.


use*_*740 7

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)