谁能解释一下这段代码?我不流利的JS,所以我需要一些帮助得到一个永久的解决方案。错误的年份一直在显示,直到我更改了底部显示的完整代码中的第5行。我几周前修改了代码,但是它突然停止工作了。
我把第5行改成了:
if (myDate.getMonth() < 10) {
:
if (myDate.getMonth() < 1) {
它成功了,我不知道为什么。
这里是完整的代码。我怀疑我的代码变更最终会停止工作。
有人能提供更好的解决方案吗?
$(document).ready(function() {
var myDate = new Date();
myDate.setDate(myDate.getDate()+1);
if (myDate.getMonth() < 1) {
var betterMonth = "0" + (myDate.getMonth() + 1);
} else {
var betterMonth = (myDate.getMonth() + 1);
}
var prettyDate = betterMonth + '/' + (myDate.getDate()) + '/' + myDate.getFullYear();
$("#formDelivery").val(prettyDate);
$("#formPhoneNumber").mask("(999) 999-9999");
$("#contactPhoneNumber").mask("(999) 999-9999");
jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
phone_number = phone_number.replace(/s+/g, "");
return this.optional(element) || phone_number.length > 9 &&
phone_number.match(/^(1-?)?(([2-9]d{2})|[2-9]d{2})-?[2-9]d{2}-?d{4}$/);
}, "Please specify a valid phone number");
$("#orderForm").validate({
rules: {
field: {
required: true,
phoneUS: true
}
}
});
$("#formDelivery").mask("99/99/9999", {placeholder:"_"}).datepicker({ minDate: +14 });
});
看看你修改的那一行…
if (myDate.getMonth() < 10) {
var betterMonth = "0" + (myDate.getMonth() + 1);
表示"如果当前月份小于10",其目的是将前导0添加到个位数月份。我在这里看到的问题是,getMonth()
返回的是一个以0为索引的月份列表,因此0实际上是1月,1是2月,以此类推。
That in mind:
代码if (myDate.getMonth() < 10) {
实际上是在说"如果当前月份小于十一月,那么在前面加一个0"。当您说返回错误的"year"时,您是指"month"吗?因为我很确定这段代码将输出010
而不是10
。
我认为应该是……
if (myDate.getMonth() < 9) {
JSFiddle例子
有了这些知识,您现在可能意识到修复为什么有效了。如果月份在2月之前,将数字更改为"1"只会添加前面的0。您的解决方案将一直工作到2月左右,并且您将开始看到
2/01/2016
而不是02/01/2016
。