-
-
Save jrhames/5200024 to your computer and use it in GitHub Desktop.
//## Moment.JS Holiday Plugin | |
// | |
//Usage: | |
// Call .holiday() from any moment object. If date is a US Federal Holiday, name of the holiday will be returned. | |
// Otherwise, return nothing. | |
// | |
// Example: | |
// `moment('12/25/2013').holiday()` will return "Christmas Day" | |
// | |
//Holidays: | |
// You can configure holiday bellow. The 'M' stands for Month and represents fixed day holidays. | |
// The 'W' stands for Week, and represents holidays with date based on week day rules. | |
// Example: '10/2/1' Columbus Day (Second monday of october). | |
// | |
//License: | |
// Copyright (c) 2013 [Jr. Hames](http://jrham.es) under [MIT License](http://opensource.org/licenses/MIT) | |
(function() { | |
var moment; | |
moment = typeof require !== "undefined" && require !== null ? require("moment") : this.moment; | |
//Holiday definitions | |
var _holidays = { | |
'M': {//Month, Day | |
'01/01': "New Year's Day", | |
'07/04': "Independence Day", | |
'11/11': "Veteran's Day", | |
'11/28': "Thanksgiving Day", | |
'11/29': "Day after Thanksgiving", | |
'12/24': "Christmas Eve", | |
'12/25': "Christmas Day", | |
'12/31': "New Year's Eve" | |
}, | |
'W': {//Month, Week of Month, Day of Week | |
'1/3/1': "Martin Luther King Jr. Day", | |
'2/3/1': "Washington's Birthday", | |
'5/5/1': "Memorial Day", | |
'9/1/1': "Labor Day", | |
'10/2/1': "Columbus Day", | |
'11/4/4': "Thanksgiving Day" | |
} | |
}; | |
moment.fn.holiday = function() { | |
var diff = 1+ (0 | (this._d.getDate() - 1) / 7), | |
memorial = (this._d.getDay() === 1 && (this._d.getDate() + 7) > 30) ? "5" : null; | |
return (_holidays['M'][this.format('MM/DD')] || _holidays['W'][this.format('M/'+ (memorial || diff) +'/d')]); | |
}; | |
if ((typeof module !== "undefined" && module !== null ? module.exports : void 0) != null) { | |
module.exports = moment; | |
} | |
}(this)); |
👍
@jrhames The thanksgiving day appears both in 'M' and 'W' hashes. Is this correct? https://gist.github.com/jrhames/5200024#file-moment-holidays-js-L28
I've created a plugin for moment that takes care of all your holiday handling and calculating needs: https://github.com/kodie/moment-holiday
My isHoliday()
function accomplishes exactly what @jrhames's gist was attempting to do accurately (@baburdick pointed out that this gist doesn't accurately figure out when Thanksgiving or Memorial day is)
For example:
moment('2017-12-25').isHoliday();
//Christmas Day
Also, my holiday()
function does exactly what @ihomecall was needing.
For example:
moment().holiday('Memorial Day');
//moment("2017-05-29T00:00:00.000")
Let me know what you think!
I want to get the full list of the national holidays (names) how can I use this?
@kodie, I tried to use your plugin on my Angular 2 app and I couldn’t get it to work. Any idea why? I got it to work on my Hugo project and it’s great!
if anyone want to use it as a function