Javascript日期似乎是错误的格式

时间:2017-08-14 14:19:52

标签: javascript jquery asp.net-mvc

请参阅以下代码:

$.validator.addMethod("agerangevalidation", function (value, elements, params) {
    if (value) {
        var valDate = new Date(value);

        var today = new Date();
        var birthDate = new Date(value); //line 7
        var age = today.getFullYear() - birthDate.getFullYear();
        var m = today.getMonth() - birthDate.getMonth();
        if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
            age--;
        }
        if (age < parseInt(params.minage) || age > parseInt(params.maxage))
        {
            //Validation failed
            return false;
        }
    }
    return true;
});

如果传递的值大于该月的第12个,则将其解析为错误的日期。这是datepicker代码:

<script type="text/javascript">
    $(function () {
        $("#datepicker").datepicker({
            dateFormat: "dd/mm/yy",
            changeMonth: true,   
            changeYear: true,   
            yearRange: "-150:+0"  

        });
    });
</script>

如何在Javascript代码中指定字符串的格式?

更新

继续下面的回答后,我安装了Momentum.js并将第一段JavaScript的第7行更改为:

var birthDate = moment(value).format('DD/MM/YYYY');

我将16/08/1999传递给该职能,生日变为08/04/2000。我做错了什么?

1 个答案:

答案 0 :(得分:0)

Javascript格式为 MM / DD / YYYY 且您的日期选择器格式为 DD / MM / YYYY ,这就是您遇到此问题的原因,我遇到了同样的问题之前,我使用dateFormat修复它: mm / dd / yyyyy ,或者你也可以使用 YYYY / MM / DD

你可以尝试使用这些控制台,也许这可以帮助你理解

new Date("2017/2/1");
//Wed Feb 01 2017 00:00:00 GMT+0800 (note it detect yyyy/mm/dd)
new Date("1/2/2017");
//Mon Jan 02 2017 00:00:00 GMT+0800 (note it detect mm/dd/yyyy)
new Date("13/2/2017");
//Invalid Date no month 13 

<强>更新

根据更新,您需要基于格式的精确时间解析器, 为此你应该使用Momentjs 这将是这样的

moment(value, 'DD/MM/YYYY').format();

您可以在Momentjs Guide Page

了解更多信息