Here is a simple function for PHP to check if a date, given in standard ISO format (Y-m-d) is a public holiday in Lithuania. I needed one for a project, so here it is for everyone:
/** * Checks if a passed date is a public holiday * (or weekend) in Lithuania * * @param bool $weekends – true if you want the function to include weekends * default – false * @param string $date – 'Y-m-d' format date (or full ISO 8601 datetime string) * defaults to current date * @return bool true (if holiday) or false (not a holiday) */ function is_lt_holiday(bool $weekends = false, string $date = null): int { //date is today if it was not passed to the function if (!isset($date)) $date = date('Y-m-d'); //check if the date is valid if ( strlen($date) < 10 || !checkdate(substr($date,5,2), substr($date,8,2), substr($date,0,4)) ) { trigger_error('You should pass a valid date in \'Y-m-d\' format'); return false; } $year = substr($date,0,4); $mday = substr($date,5,5); $easter = date('Y-m-d',easter_date($year)); $easter2 = date('Y-m-d', strtotime($easter . ' +1 day')); $public_holidays = [ '01-01', //new year '02-16', //independence day '03-11', //restoration of independence day substr($easter,5,5), //easter day1 substr($easter2,5,5), //easter day2 '05-01', //int worker's day '06-24', //summer solstice '07-06', //state day '08-15', //mary's assumption '11-01', //all saints day '11-02', //day of the dead '12-24', //christmas eve '12-25', // christmas day1 '12-26' //christmas day2 ]; if (in_array($mday,$public_holidays)) { return true; } elseif ( $weekends == true && (date('D',strtotime($date)) == 'Sat' || date('D',strtotime($date)) == 'Sun') ) { return true; } return false; }
And now let’s test it:
echo is_lt_holiday(true); //today; it depends 🙂 echo is_lt_holiday(false,'2022-01-01'); //returns true echo is_lt_holiday(false,'2022-01-02'); //returns false echo is_lt_holiday(false,'2022-01-32'); //returns false and error notice – an impossible date
Leave a Reply