【发布时间】:2018-11-20 17:22:24
【问题描述】:
我有这种情况,用户设置日期和天数的表单,因此我可以通过 javascript 方法计算截止日期。我找到了一个 api,它在我所在城市的假期中返回 json 对象。问题是,当我调用我的方法传递一个我知道是假期并且它存在于 json 对象中的日期时,该方法返回 false。如果我在 chrome 的开发工具上逐行复制并粘贴该方法,它会返回 true。我错过了什么?
OBS:我的国家使用的日期格式是 dd/mm/YYYY,这就是为什么我使用一些日期格式并与 json 对象中返回的日期进行比较。
function verifyHoliday(date){
var url = "https://api.calendario.com.br/?json=true&ano=2018&estado=SP&cidade=MOGI_GUACU&token=ZGdvLmRpZWdvY2FydmFsaG9AZ21haWwuY29tJmhhc2g9MTYzMjcxMDY3";
var day = (date.getDate() < 10) ? "0"+date.getDate() : date.getDate();
var dateString = day + "/" + (date.getMonth() + 1) + "/" + date.getFullYear();
//====================================================
var holiday = false;
var holidays = [];
$.getJSON(url, function(data){
for(var i = 0; i < data.length; i++){
var obj = {day: data[i].date, name: data[i].name};
holidays[i] = obj;
}
});
for(var i = 0; i < holidays.length; i++){
if(holidays[i].day == dateString){
holiday = true;
break;
}
}
return feriado;
}
【问题讨论】:
-
$.getJSON 是异步的,这意味着在执行迭代它的代码之后填充假期数组。查看重复的问题,这是一个非常常见的问题
-
尝试在页面加载后立即加载包含假期的完整数组,例如使用 document.onload。
-
您正在填充日期而不是月份,因此您将得到一个类似于“01/1/2019”的日期。此外,您正在设置 holiday 的值,但返回 feriado。
标签: javascript json date