Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要帮助从日期提取年份吗?_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 需要帮助从日期提取年份吗?

Javascript 需要帮助从日期提取年份吗?,javascript,jquery,regex,Javascript,Jquery,Regex,我使用正则表达式来匹配日期格式。还可以从日期中提取年、月、日期。但我无法在这里获得完整的年份值。如果我输入了2013-02-29,我将在一年内得到20,而不是2013。我在这里尝试的是:- $(document).ready(function(){ var dateVal = '2013-06-01'; var rxDatePattern = /^(19|20)\d\d(-)(0[1-9]|1[012])(-)(0[1-9]|[12][0-9]|3[01])$/; var

我使用正则表达式来匹配日期格式。还可以从日期中提取年、月、日期。但我无法在这里获得完整的年份值。如果我输入了
2013-02-29
,我将在一年内得到
20
,而不是
2013
。我在这里尝试的是:-

$(document).ready(function(){
    var dateVal = '2013-06-01';
    var rxDatePattern = /^(19|20)\d\d(-)(0[1-9]|1[012])(-)(0[1-9]|[12][0-9]|3[01])$/;
    var dtArray = dateVal.match(rxDatePattern);

    dtYear = dtArray[1];
    dtMonth = dtArray[3];
    dtDay = dtArray[5];

    jQuery.each(dtArray, function(index, value) {
        console.log(index + ': ' + value);
    });
}); 
我得到输出:-

0: 2013-06-01

1: 20

2: -

3: 06

4: -

5: 01
这是小提琴:

以下是我使用上述代码的完整代码:-

//varify date formate
jQuery.validator.addMethod(
    "siteDateValidator",
    function (value, element) {
        var currVal = value;
        if (currVal != '') {
            var rxDatePattern = /^(19|20)\d\d(-)(0[1-9]|1[012])(-)(0[1-9]|[12][0-9]|3[01])$/;
            var dtArray = currVal.match(rxDatePattern);
            if (dtArray == null) {
                return false;
            }
            dtYear = (dtArray[1]);
            dtMonth = (dtArray[3]);
            dtDay = (dtArray[5]);

            if (dtMonth < 1 || dtMonth > 12) return false;
            else if (dtDay < 1 || dtDay > 31) return false;
            else if ((dtMonth == 4 || dtMonth == 6 || dtMonth == 9 || dtMonth == 11) && dtDay == 31) return false;
            else if (dtMonth == 2) {
                var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0));
                    if (dtDay > 29 || (dtDay == 29 && !isleap)){
                        return false;
                    }
            }
        }
        return true;
    },
    "Please enter a valid date, date format should be(yyyy-mm-dd) and year should be greater than equal to 1900."
);
//可变日期格式
jQuery.validator.addMethod(
“siteDateValidator”,
函数(值、元素){
var currVal=价值;
如果(currVal!=''){
var rxDatePattern=/^(19 | 20)\d\d(-)(0[1-9]| 1[012])((0[1-9]|[12][0-9]| 3[01])$;
var dtArray=currVal.match(rxDatePattern);
if(dtArray==null){
返回false;
}
dtYear=(dtArray[1]);
dtMonth=(dtArray[3]);
dtDay=(dtArray[5]);
如果(dtMonth<1 | | dtMonth>12)返回false;
否则如果(dtDay<1 | | dtDay>31)返回false;
否则如果((dtMonth==4 | | dtMonth==6 | | dtMonth==9 | | dtMonth==11)和&dtDay==31)返回false;
否则如果(dtMonth==2){
var isleap=(dtYear%4==0&&(dtYear%100!=0 | | dtYear%400==0));
如果(dtDay>29 | |(dtDay==29&&!isleap)){
返回false;
}
}
}
返回true;
},
请输入有效日期,日期格式应为(yyyy-mm-dd),年份应大于等于1900
);

为什么不使用内置javascript日期类

var d = new Date("2013-02-29");
d.getFullYear(); // 2013

更新: 您可以通过调用以下命令来检测给定日期是否无效:

var valid = !isNaN(d.getTime()); // returns true if valid, false if invalid

为什么不使用内置javascript日期类

var d = new Date("2013-02-29");
d.getFullYear(); // 2013

更新: 您可以通过调用以下命令来检测给定日期是否无效:

var valid = !isNaN(d.getTime()); // returns true if valid, false if invalid
为什么不使用split()

为什么不使用split()


像这样的东西怎么样:

var dateVal  = '2013-06-01';
var parts    = dateVal.match(/(\d{4})-(\d{2})-(\d{2})/)
var testDate = new Date(parts[1], parts[2] - 1, parts[3])
var isFormatValid = parts[1] == testDate.getFullYear()     && // format check
                    parts[2] == testDate.getMonth   () + 1 &&
                    parts[3] == testDate.getDate    ()

var isBusinessValid = isFormatValid && parts[1] >= 1900; // business related 

alert(dateVal + "\n" + testDate + "\n" + isFormatValid + "\n" + isBusinessValid)

在这种情况下,您不需要在正则表达式中处理完整的日期支持,只需提取相关部分,构建一个
date
对象,并与输入的输入进行比较。Javascript会为您关心闰年之类的事情。

这样的事情怎么样:

var dateVal  = '2013-06-01';
var parts    = dateVal.match(/(\d{4})-(\d{2})-(\d{2})/)
var testDate = new Date(parts[1], parts[2] - 1, parts[3])
var isFormatValid = parts[1] == testDate.getFullYear()     && // format check
                    parts[2] == testDate.getMonth   () + 1 &&
                    parts[3] == testDate.getDate    ()

var isBusinessValid = isFormatValid && parts[1] >= 1900; // business related 

alert(dateVal + "\n" + testDate + "\n" + isFormatValid + "\n" + isBusinessValid)
在这种情况下,您不需要在正则表达式中处理完整的日期支持,只需提取相关部分,构建一个
date
对象,并与输入的输入进行比较。Javascript将为您关心闰年等问题。

以下是简单的答案:

var rxDatePattern = /^(19[\d]{2}|20[\d]{2})(\-)(0[1-9]|1[012])(\-)(0[1-9]|[12][0-9]|3[01])$/;
以下是简单的答案:

var rxDatePattern = /^(19[\d]{2}|20[\d]{2})(\-)(0[1-9]|1[012])(\-)(0[1-9]|[12][0-9]|3[01])$/;

如果要验证日期和格式,可以使用:

// Validate date in format yyyy-mm-dd
// Leading zeros on single digit months and days are optional
function validateDate(dateString) {
  var s = dateString.split('-');
  var d = new Date(s[0], --s[1], s[2]);
  return d && d.getFullYear() == s[0] && d.getDate() == s[2];
}

如果您想检查一位数的月份和天数是否有前导零,请尝试,但我看不出重点。

如果您想验证日期和格式,可以使用:

// Validate date in format yyyy-mm-dd
// Leading zeros on single digit months and days are optional
function validateDate(dateString) {
  var s = dateString.split('-');
  var d = new Date(s[0], --s[1], s[2]);
  return d && d.getFullYear() == s[0] && d.getDate() == s[2];
}

如果您想检查一位数的月份和天数是否有前导零,请尝试,但我看不出有什么意义。

替换您错过的年度部分分组的正则表达式。它应该是
(?:19 | 20)\d\d)
而不是
(19 | 20)\d\d

/^((?:19|20)\d\d)(-)(0[1-9]|1[012])(-)(0[1-9]|[12][0-9]|3[01])$/

这里是工作小提琴:-

替换您错过了年度部分分组的正则表达式。它应该是
(?:19 | 20)\d\d)
而不是
(19 | 20)\d\d

/^((?:19|20)\d\d)(-)(0[1-9]|1[012])(-)(0[1-9]|[12][0-9]|3[01])$/

这是一个工作小提琴:这里是一个工作小提琴:以下是工作小提琴:以下是工作小提琴:以下是工作小提琴:以下是工作小提琴:以下是工作小提琴:-

错误分组错误分组错误分组错误分组错误分组错误分组<代码>错误分组<代码>错误分组<代码>错误分组<代码>错误分组<代码>错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错)[0]?我在jquery验证中使用了验证用户获取特定日期格式的部分代码。ES5引入了对ISO8601日期格式的有限支持,在此之前,解析日期完全依赖于实现。IE8和其他浏览器可能不支持上述功能。我添加了一个更新,显示了如何检测有效/无效的date@Adam—. 如果要使用它,请使用
Date.parse(string)
,如果日期无效,它将返回
NaN
。如果它确实返回
NaN
,则
d.getTime
将抛出错误。您只需执行以下操作:
vard=Date.parse;如果(d){…}
。请注意,这都是ES5,并且仅适用于ISO8601格式,否则您将返回到依赖于实现的状态。哦,
Date
是一个函数,javascript中没有类。我在jquery验证中使用了验证用户获取特定日期格式的部分代码。ES5引入了对ISO8601日期格式的有限支持,在此之前,解析日期完全依赖于实现。IE8和其他浏览器可能不支持上述功能。我添加了一个更新,显示了如何检测有效/无效的date@Adam—. 如果要使用它,请使用
Date.parse(string)
,如果日期无效,它将返回
NaN
。如果它确实返回
NaN
,则
d.getTime
将抛出错误。您只需执行以下操作:
vard=Date.parse;如果(d){…}
。请注意,这都是ES5,并且仅适用于ISO8601格式,否则您将返回到依赖于实现的状态。哦,
Date
是一个函数,javascript中没有类。谢谢,但请查看我更新的que。我认为这不符合我的要求。我知道我可以使用SplitThank完成,但请检查我更新的que。我认为这不符合我的要求。我知道我可以使用splitdear进行验证,它还将验证
9200-01-01
。我需要的年数应该大于1900@Roopendra查看我的新答案谢谢你的更正和时间。它也在工作。亲爱的,它还将验证
9200-01-01
。我需要的年数应该大于1900@Roopendra查看我的新答案谢谢你的更正和时间。它也在工作。谢谢你的时间。我需要检查年份是否应大于1900。这就是为什么我要接受regexIn这个案子,你可以