使用HolidayAPI进行银行假期

时间:2016-03-22 09:50:01

标签: javascript api

问题: 如果日期是银行假日,如何使用API​​返回布尔值?

我做了一些研究,找到了一个很棒且免费的API,其中包含银行假期,但是我在使用它时遇到了麻烦:http://holidayapi.com/

如果我要使用此代码:

 var year = 2016;
 var month = 3;
 var day = 25;
 var isAHoliday = false;

 $.getJSON(
          "http://holidayapi.com/v1/holidays?country=GB&year=" + year + "&month=" + month + "&day=" + day, function (data) {
                  console.log(data); //DOES NOT DISPLAY IN CONSOLE
                if (data.holidays.length > 0) {
                    // BANK HOLIDAY
                    isAHoliday = true;
                }
                else {
                    //IS NOT BANK HOLIDAY
                    //AND NOTHING NEEDS TO BE DONE
                }
          });               

我希望能够返回真值或假值,具体取决于是否返回任何数据,但是由于没有调用getJSON请求我做错了,请有人纠正我哪里出错了?

http://holidayapi.com/v1/holidays?country=GB&year=2016&month=03&day=25返回{"status":200,"holidays":[{"name":"Good Friday","country":"GB","date":"2016-03-25"}]}

http://holidayapi.com/v1/holidays?country=GB&year=2016&month=03&day=26返回{"status":200,"holidays":[]}

看来这会导致问题: "http://holidayapi.com/v1/holidays?country=GB&year=" + year + "&month=" + month + "&day=" + day;如果我通过上面的2个网址之一,我会得到正确的结果,我现在正在玩游戏这个

https://jsfiddle.net/dcxk6ens/

2 个答案:

答案 0 :(得分:1)

必须将holidays对象作为返回的data对象的子对象调用:

由于holidays对象是一个数组,因此您还需要使用索引来访问项目。假设至少返回了一个项目,您将得到如下日期:

var myDate = data.holidays[0].date;

但是,在获取第一个对象之前,应始终检查数组中是否至少有一个对象:

if(data.holidays.length > 0){...}

顺便说一句,如果你想做的就是检查某个特定日期是否有假期,那么这个if语句就是你所需要的,因为数组长度大于零意味着至少有一个假期

修改

对您的问题的完整答案,您可以将其置于.done()方法中:

var isAHoliday = false;
if(data.holidays.length > 0){
    // There's at least one holiday today!
    isAHoliday = true;
}

你不必声明一个局部变量,你可能会使用一个在别处声明的变量,但这取决于你。

答案 1 :(得分:1)

如果您只是想在所选日期是假日时返回true值,或者false如果不是,则可以使用如下函数:

(请注意,jsfiddle不会使用" http://"协议对URL执行任何AJAX调用,因为它不安全。)

function isDateAHoliday(y, m, d) {

    var jsonURL = "http://holidayapi.com/v1/holidays?country=GB&year=" + y + "&month=" + m + "&day=" + d;
    var isAHoliday = false;

    $.getJSON(jsonURL, function (data) {
        // If the date is a holiday
        if (data.holidays.length > 0) {
            // Do some things
            isAHoliday = true;
        }
        // Check values
        console.log("JSON DATA:  ", data);
        console.log("Holiday?:   " + isAHoliday);

        return isAHoliday;
    });
}

isDateAHoliday("2016", "3", "25");

如果您想要返回假期的名称和国家/地区,则可以在isAHoliday = data.holidays[0];声明中替换if