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

时间:2015-07-06 22:12:23

标签: javascript date

我有来自日期选择器的日期,我正在访问 -

var transdate = $j("input[name='enterdate']").val();

导致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");
}

4 个答案:

答案 0 :(得分:8)

Moment.js是一个方便的日期库,可以轻松实现。

moment('6/22/2015', 'M/D/YYYY')
  .isBetween('2015-02-01', '2015-07-30'); // => true

请注意,只有第一个(美国格式)日期字符串需要提供显式格式字符串。

时刻可以单独用于解析,例如。即使没有使用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

答案 1 :(得分:7)

字符串不是唯一的格式defined to be handled by the Date object。这意味着必须解析它(使用正则表达式或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;

使用接受日期部分的Date构造函数作为单独的数字参数(年,月,日)。 +将字符串转换为数字。 [x]是正则表达式中的捕获组。您必须从月中减去一个因为几个月以JavaScript中的0开头。

答案 2 :(得分:4)

许多次问过类似的问题,但我似乎无法找到重复的问题。鉴于Date构造函数不可靠地解析字符串,最简单的解决方案是自己解析字符串:

function parseMDY(s) {
  var b = s.split(/\D/);
  return new Date(b[2], b[0]-1, b[1]);
}

答案 3 :(得分:3)

以下是您输出的JSFIDDLE

Moment.js将为您提供良好的编码灵活性。

别忘了在你的HTML中添加jquery和moment.js

var transdate="6/22/2014";
var convertStringToValidDate = new Date(transdate);
$(document).ready(function(){
$("#selectedDate").text(transdate);
$("#validDate").text(convertStringToValidDate);
converttoformat = moment(convertStringToValidDate).format("YYYY-MM-DD");    
$("#converttoyyyymmdd").text(converttoformat);   

    if(moment(converttoformat).isBetween('2015-02-01', '2015-07-30')){
        $("#result").text("Date lies in between");
    }
    else{
        $("#result").text("Date is out of scope");
    }


});