JavaScript の lastModified を表示すると、2000年12月31日を米国式に「12/31/2000」と表示したり、9時間ずれたタイムゾーンで時刻を表示したり、いろいろと問題があります。どうすれば、lastModified の値を日本人好みのフォーマットで表示できるか、ブラウザの実装情報を集めてみました。(ご協力いただいた皆様ありがとうございました。)
実験したソースは以下のようなものです。
d1 = new Date(document.lastModified); d2 = new Date(2000, 11, 31, 23, 59, 59); document.writeln("<pre>"); document.writeln(navigator.userAgent); document.writeln("(1) " + document.lastModified); document.writeln("(2) " + d1); document.writeln("(3) " + d2.toString()); document.writeln("(4) " + d2.toLocaleString()); document.writeln("(5) " + d2.toGMTString()); document.writeln("(6) " + d2.toUTCString()); document.writeln("(7) " + d2.getYear()); document.writeln("</pre>");
比較しやすいように、日付は 2000/12/31(日) 23:59:59 に統一しています。そのブラウザでサポートされていない関数や問題の発生する関数は // でコメントアウトして実行します。
Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) (1) 12/31/2000 23:59:59 (2) Sun Dec 31 23:59:59 UTC+0900 2000 (3) Sun Dec 31 23:59:59 UTC+0900 2000 (4) 2000年12月31日 23:59:59 (5) Sun, 31 Dec 2000 14:59:59 UTC (6) Sun, 31 Dec 2000 14:59:59 UTC (7) 2000
Mozilla/4.0 (compatible; MSIE 5.0; Windows 95) (1) 12/31/2000 23:59:59 (2) Sun Dec 31 23:59:59 UTC+0900 2000 (3) Sun Dec 31 23:59:59 UTC+0900 2000 (4) 12/31/2000 23:59:59 (5) Sun, 31 Dec 2000 14:59:59 UTC (6) Sun, 31 Dec 2000 14:59:59 UTC (7) 2000
Mozilla/4.0 (compatible; MSIE 4.01; Windows 95) (1) 12/31/2000 14:59:59 ← 9時間ずれている (2) Mon Dec 31 14:59:59 UTC+0900 1900 ← 間違ってる (3) Sun Dec 31 23:59:59 UTC+0900 2000 (4) 12/31/2000 23:59:59 (5) Sun, 31 Dec 2000 14:59:59 UTC (6) Sun, 31 Dec 2000 14:59:59 UTC (7) 2000
Mozilla/2.0 (compatible; MSIE 3.02; Update a; Windows 95) (1) 日 12 31 23:59:59 2000 ← わかりづらい (2) Thu Jan 01 09:00:00 1970 ← 間違ってる (3) Sun Dec 31 23:59:59 2000 (4) 12/31/00 23:59:59 (5) Sun, 31 Dec 2000 14:59:59 GMT (6) 未サポート。 (7) 100
Mozilla/5.0 (Windows; U; Win98; ja-JP; rv:0.9.2) Gecko/20010726 Netscape6/6.1 (1) Sunday, December 31, 2000 23:59:59 (2) Sun Dec 31 23:59:59 GMT+0900 2000 (3) Sun Dec 31 23:59:59 GMT+0900 2000 (4) Sunday, December 31, 2000 23:59:59 (5) Sun, 31 Dec 2000 14:59:59 GMT (6) Sun, 31 Dec 2000 14:59:59 GMT (7) 100
Mozilla/4.7 [ja] (Win98; I) (1) Sunday, December 31, 2000 23:59:59 (2) Sun Dec 31 23:59:59 GMT+0900 (???? (?W????)) 2000 (3) Sun Dec 31 23:59:59 GMT+0900 (???? (?W????)) 2000 (4) Sunday, December 31, 2000 23:59:59 (5) Sun, 31 Dec 2000 14:59:59 GMT (6) Sun, 31 Dec 2000 14:59:59 GMT (7) 100
Mozilla/4.71 (Macintosh; I; PPC) (1) Dec 11 12:24:30 1929 ← 大嘘 (2) Wed Dec 11 12:24:30 GMT-1500 1929 ← 大嘘 (3) Sun Dec 31 23:59:59 GMT-1500 2000 (4) Dec 31 23:59:59 2000 (5) Mon, 01 Jan 2001 14:59:59 GMT ← 大嘘 (6) Mon, 01 Jan 2001 14:59:59 GMT ← 大嘘 (7) 100
Mozilla/4.08 [Vine-ja] (X11; I; Linux 2.0.36 i586) (1) Sun 31 Dec 2000 11:59:59 PM JST (2) Invalid Date ← 解釈できない (3) Sun Dec 31 23:59:59 GMT+0900 (JST) 2000 (4) Sun 31 Dec 2000 11:59:59 PM JST (5) Sun, 31 Dec 2000 14:59:59 GMT (6) Sun, 31 Dec 2000 14:59:59 GMT (7) 100
Mozilla/4.08 [en] (WinNT; I ;Nav) (1) 12/31/00 23:59:59 (2) Mon Dec 31 23:59:59 GMT+0900 (???? (?W????)) 1900 (3) Sun Dec 31 23:59:59 GMT+0900 (???? (?W????)) 2000 (4) Sunday, December 31, 2000 23:59:59 (5) Sun, 31 Dec 2000 14:59:59 GMT (6) Sun, 31 Dec 2000 14:59:59 GMT (7) 100
Mozilla/4.01 [ja] (Win95; I) (1) 12/31/00 23:59:59 (2) Mon Dec 31 23:59:59 東京 (標準時) 1900 (3) Sun Dec 31 23:59:59 東京 (標準時) 2000 (4) 12/31/00 23:59:59 (5) Sun, 31 Dec 2000 14:59:59 GMT (6) 未サポート (7) 2000
Mozilla/2.01I (Win95; I) (1) Sun Dec 31 23:59:59 2000 lastModifiedの後に改行がはいる (2) ブラウザがアプリケーションエラー (3) Sun Dec 31 23:59:59 2000 (4) 12/31/00 23:59:59 (5) Sun, 31 Dec 2000 14:59:59 GMT (6) 未サポート (7) 100
Mozilla/3.0 [ja] (compatible; HotJava; x86) (1) Sun Dec 31 23:59:59 JST 2000 (2) Invalid Date ← 解釈できない (3) Sun Dec 31 23:59:59 GMT+0900 (GMT+09:00) 2000 (4) 2000/12/31 23:59:59:GMT+09:00 (5) Sun, 31 Dec 2000 14:59:59 GMT (6) Sun, 31 Dec 2000 14:59:59 GMT (7) 100
すみません。集めた情報から、適切な回答をひねり出そうとしたのですが、各ブラウザの実装があまりにもひどくて・・・実際のところ、次のような善後策しかないように思います。
例えば同じ IE4.0(Win) でも、Mshtml.dll の修正プログラムを適用すると日付の解釈や表示が変わってしまうという報告をいただきました。lastModified は・・・素直にそのまま表示した方が無難そうですね・・・(2002.2.3追記)