(1)〜(2) lastModifiedの値と、それをDate()で解釈するとどうなるか、(3)〜(6) toString(), toLocaleString(), toGMTString(), toUTCString()のフォーマットの違い、(7) getYear()の動作の違いについて調べてみました。(ご協力いただいた皆様に感謝いたします。)
- 比較しやすいように、日付は 2000/12/31(日) 23:59:59 に統一しています。
- そのブラウザでサポートされていない関数や問題の発生する関数は // でコメントアウトして実行します。
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("----------"); document.writeln("(3) " + d2.toString()); document.writeln("(4) " + d2.toLocaleString()); document.writeln("(5) " + d2.toGMTString()); document.writeln("(6) " + d2.toUTCString()); document.writeln("----------"); document.writeln("(7) " + d2.getYear()); document.writeln("</PRE>");
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/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
以上の情報を集めて、lastModified の値を奇麗にフォーマットして表示するにはどうすればよいかを考察するつもりだったのですが・・・あきらめました!!面倒でも、手作業で更新日を記入するか、他のブラウザで表示が変になるのを覚悟で Date(document.lastModified) を使用するか、上記の情報を元に、主要ブラウザの振る舞いを考慮したソースコードを書くか・・・