JavaScriptのDateオブジェクトはdate.setMonth(-1)とやると、前年の12月にしてくれて大変便利なのですが、Safariで上手く動かなかったりするようなのでprototype上書きで対処してみました。 // fix safari's Date#setMonth (function(){ var set_month = Date.prototype.setMonth; Date.prototype.setMonth = function(num){ if(num <= -1){ var n = Math.ceil(-num); var back_year = Math.ceil(n/12); var month = (n % 12) ? 12 - n % 12 : 0 ; this.setFullYear(this.getFullYear() - back_year)