文字列で新しい日付オブジェクトを書くとき、次のように書くことができます:
var someDay = new Date("12/01/2012");
これは 2012 年 12 月 1 日と同じです。
しかし、フォーマットが月/日/年ではなく、日/月/年の Web サイトでユーザーが日付を入力する必要がある場合はどうなるでしょうか。それでは、正しい日付で日付オブジェクトを作成するにはどうすればよいでしょうか?
文字列で新しい日付オブジェクトを書くとき、次のように書くことができます:
var someDay = new Date("12/01/2012");
これは 2012 年 12 月 1 日と同じです。
しかし、フォーマットが月/日/年ではなく、日/月/年の Web サイトでユーザーが日付を入力する必要がある場合はどうなるでしょうか。それでは、正しい日付で日付オブジェクトを作成するにはどうすればよいでしょうか?
別の Web サイトからデータを文字列として取得する場合は、その Web サイトが提供する日付の形式を知る必要があります。DMY と MDY は区別できないため、これを回避する方法はありません。年に 2 桁の形式を使用すると、YMD でさえ見分けがつかなくなります。
これはまったくテストされていませんが、最悪の場合、一般的な考え方で問題が解決するはずです。
var pattern = /^(\d+)\b(\d+)\b(\d+)$/;
if (!pattern.test(dateString))
return null;
var matches = dateString.match(pattern);
if (siteUsesDMY)
return new Date(matches[2], matches[1]-1, matches[0]);
if (siteUsesMDY)
return new Date(matches[2], matches[0]-1, matches[1]);
...
パターン: このパターンは、日付の任意の数値表現をサポートします。ただし、各単位の間に改行文字があることを前提としています。改行文字を持たない Web サイトをサポートする必要がある場合は、その Web サイトの正確な形式に一致する別のパターンが必要になります (つまり、サイトが DDMMYYYY を送信すると、パターンは になります/^(\d{2})(\d{2})(\d{4})$/
)。
また、JavaScript が月に 0 ~ 11 を使用することを思い出したので、日付作成の月パラメーターも修正しました。