/ 最近 .rdf 追記 編集 設定 本棚

脳log[20140224]



2014年02月24日 (月) ときどきの雑記帖″ 2014年2月(中旬)」経由で「[Javascript]日付生成の見落とし」■引用1「result = new Date(2014, 2, 31); どうもJavascriptでは、存在しないような不正な入力に対してはType Errorが投げられるわけではなく、よきに計らった(おせっかいな?)値を返してくれる。今回のように2月31日が無い場合は、次月の3月31日を返すようになっている。他にも1月32日を指定すると2月1日を返してきたりします。」■おお、たしかに new Date(2014, 2, 31)は(地方時の) 2014-03-31を返す。しかし、次月同日が選ばれる合理的な理由があるか?それから、new Date(2014, 1, 32)が返すのは(リンク先の人が書いた) 2月1日ではなく 3月4日だった(※JScript5.8と Firefox23では)。これは(現在の)俺の理解に合致している。■3rd/5th ed.の規格を読んだが、良きに計らってくれるというのは間違いない。month(引数)を 12で割った商(※切り捨てて整数化)を year(※2桁年を1900年代と解釈済みの引数)に加え、余りを改めて monthとする。その日付 year-month-01に (date-1)日を加えたものが生成される日時となる(※時間の引数はないものとした)。■気付いただろうか?俺は何度も何度も読み返すまで今年の 2月31日が 3月3日でなく 3月31日になるからくりに気付けなかった。ポイントは「12で割った商」という部分。これだと new Date(2014, 12)は 2015年の 0月だか 1月になっちゃいます(実際にそうなる)。もうわかったよね?「month 必ず指定します。月を表す 0 ~ 11 (1 ~ 12 月に相当) の範囲内の整数を指定します。(msdn.microsoft.com)」■引用2「不具合対応としては、当日ではなく初日(1日)を指定するように修正を行った。」■new Date(2014, 2, 31)も new Date(2014, 2, 1)も 3月になるはずですが、それで解決しましたか? 9時間進んだ地方時としてセットして UTCとして日付を取り出せば、前月最終日の15時になってるからめでたしめでたし?(そんなはずはない)