コンピューターに除算を依頼したためとdocument.write IsDate(20/01/2012)
書かれていない理由を尋ねている場合は、それを日付として評価します。true
20/01 = 20 => 20/2012 ~= 0.01
IsDate(0.01) => false
持っているものを本当にテストしたい場合は、代わりにこれを試してください(小さな調整)
Your: document.write IsDate(20/01/2012)
Mine: document.write IsDate("20/01/2012")
また、明確にするためにhttp://en.wikipedia.org/wiki/Date_format_by_country
使用している国もある
dd/mm/yyyy
といくつかの場所で使用
mm/dd/yyyy
そのため、国際標準化機構 (International Standards Organization) は、特定性が最も低いものに対して最も特異性が高いものを実行することを推奨しています。
yyyy-mm-dd hh:mm:ss.ffffffffffff
年 -> 月 (どの月がどの年よりも具体的であるか) -> 日 (イベントが発生する日が役立つ) -> 時間 (遅刻しないでください!) -> 分 (ベルによって保存されますか?) であることに注意してください。 -> 数秒 (これで、いつ起こったかがわかります) -> 1 秒未満 (オリンピック水泳!!)
年はかなり不特定です。1年で色んなことが起こります。したがって、それらは常に最初に解析する必要があります。ISO 方式は日付情報を渡す方法として推奨されており、年が最初に来ない場合、システムはインテリジェントに推測しようとします。世界にはそうする地域もdmy
あればそうする地域もmdy
あり、最初の 2 つの数字のうち 1 つだけが 12 を超えているためdmy
、mdy
. ここにはWTFはありません。
記録として、形式の伝統として主に月を最初に置く国のリストを以下に示しmdy
ます (伝統ではなく科学である ISO 形式を除く)。
- ベリーズ
- ミクロネシア連邦
- パラオ
- アメリカ合衆国
最後に、日付を再解析する関数を書きたい場合は、次のようにします。
スペース、ピリオド、ハイフン、またはスラッシュのいずれかで日付を区切る傾向があることを考慮してください。「20120817」と書いたり、時刻も含めたりする場合があります。真ん中に T があり、最後に Z がある場合があります。
サンプル入力: (およびそれらが表す日付)
2011-08-17 (august 17th)
2011-08-01 (august 1st or jan 8th?)
08-01-2011 (august 1st or jan 8th?)
08-17-2011 (august 17th)
17-08-2011 (august 17th)
2011-17-08 (I've never seen this ever)
2011/08/17 (august 17th)
2011.08.01 (august 1st or jan 8th?)
08\01\2011 (august 1st or jan 8th?)
08-17-2011 (august 17th)
17 08 2011 (august 17th)
ご覧のとおり、ここで実行する必要があるかなりの量の解析があります。それは、10 桁の文字列があり、その 10 桁が日付であると仮定することです。その他の日付形式は次のとおりです。
08-01-12 (was that January 8th, 2012 or January 12th, 2008 or August 1st, 2012 ...)
15-03-13 (ok, so we have found the month is March, but the other two?)
1-1-1
8-8-8 (these two are easy, but which rule do they match?)
そして、解析する必要があります
20120817
20121708
20120801
01082012
08172012
ご覧のとおり、関数の解析は簡単に見えますが、考慮すべきことがたくさんあります。これは単なる日付です。次は時間について話しましょうか?
201208171311 -> 2012-08-17 13:11 (1:11 PM)
20120817T1311 -> 2012-08-17 13:11 (1:11 PM)
20120817T0111P -> 2012-08-17 01:11 PM