Oct 23, 2006
SafariのDate#setMonthがバグってたのでprototype上書きで対処してみる
JavaScriptのDateオブジェクトはdate.setMonth(-1)とやると、前年の12月にしてくれて大変便利なのですが、Safariで上手く動かなかったりするようなのでprototype上書きで対処してみました。
引数に-1以下の数字が渡ってきた場合は、自前で何年前の何月かを計算します。それ以外の場合はオリジナルのsetMonthメソッドを呼び出します。safariでもsetMonth(12)の方は上手く動いてくれるようで、きちんと来年の1月にしてくれます。
Appleのサイト上にこんな文章があるのですが、
http://www.mac.com/web/ja/Tips/425954F3-DF73-4B9B-94AC-20EE4BDE374C.html
言わずもがな、Safariがバグってるからです。
// 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);
return set_month.call(this, month);
} else {
return set_month.apply(this, arguments);
}
}
})();
引数に-1以下の数字が渡ってきた場合は、自前で何年前の何月かを計算します。それ以外の場合はオリジナルのsetMonthメソッドを呼び出します。safariでもsetMonth(12)の方は上手く動いてくれるようで、きちんと来年の1月にしてくれます。
Appleのサイト上にこんな文章があるのですが、
http://www.mac.com/web/ja/Tips/425954F3-DF73-4B9B-94AC-20EE4BDE374C.html
もしアップルが推奨するブラウザを使っていて機能しないサイトを見つけたら、 苦情を申し立てましょう。 そのサイトが、 Web 上でもっとも進化したものに対応できるブラウザでもうまく機能しないのはなぜなのか、 サイトオーナーに説明を求めるとよいでしょう。
言わずもがな、Safariがバグってるからです。
WriteBacks
javascript - (new Date).setMonth(-1)の振る舞い
最速インターフェース研究会 :: SafariのDate#setMonthがバグってたのでprototype上書きで対処してみるJavaScriptのDateオブジェクトはdate.setMonth(-1)とやると、前年の12月にしてくれて大変便利なのですが、Safariで上手く動かなかったりするようなのでprototype上書きで....
Posted by 404 Blog Not Found at 2006/10/25 (Wed) 14:27:41
Safari の Date の修正
Safari の Date#setMonth にバグがあると聞いて試してみたところ、そもそも Date コンストラクタからして月の負数指定に対応していない様子。やれやれ仕方のない子だな WebKit はというわけで
Posted by Days on the Moon at 2006/10/25 (Wed) 21:00:39
相互リンクしませんか?「777タウン@ちゃんねる」
777タウン@ちゃんねるのバンバンです。
相互リンクしてくれているサイトオーナー様ありがとうございます!もし、
あなたもサイトやブログを持っているなら相互リンクしませんか?
Posted by 777タウン@ちゃんねる at 2006/12/17 (Sun) 09:16:49
相互リンクしませんか?「777タウン@ちゃんねる」
777タウン@ちゃんねるのバンバンです。
相互リンクしてくれているサイトオーナー様ありがとうございます!もし、
あなたもサイトやブログを持っているなら相互リンクしませんか?
Posted by 777タウン@ちゃんねる at 2006/12/17 (Sun) 09:28:23
Posted by at 2007/04/26 (Thu) 18:18:25
http://la.ma.la/blog/diary_200610232213.trackback
writeback message: Ready to post a comment.

