SafariのDate#setMonthがバグってたのでprototype上書きで対処してみる

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);
            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/20 (Fri) 12:00:06

Posted by at 2007/04/26 (Thu) 18:18:25
TrackBack ping me at
http://la.ma.la/blog/diary_200610232213.trackback
Post a comment

writeback message: Ready to post a comment.







spam yoke. nanimo ireruna.