web-dev-qa-db-ja.com

JavaScriptで文字列から日付オブジェクトを作成する方法

この文字列を30/11/2011にします。それを日付オブジェクトに変換したいです。

私は使用する必要がありますか:

Date d = new Date(2011,11,30);   /* months 1..12? */

または

Date d = new Date(2011,10,30);   /* months 0..11? */

155
Bader
var d = new Date(2011,10,30);

月はjsの0からインデックスされているので。

220
Dogbert

JSの月は0から列挙されるので、あなたは間違いなく2番目の式を使用したいのです。

また、Date.parseメソッドを使うこともできますが、異なる日付フォーマットを使います。

var d = Date.parse("11/30/2011");
69
Igor Dymov

構文は次のとおりです。

new Date(year, month [, day, hour, minute, second, millisecond ])

そう

Date d = new Date(2011,10,30);

正しい;日、時、分、秒、ミリ秒はオプションです。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

52

上記のように日付を作成する方法は複数あります。私は同じことを繰り返さないでしょう。これがあなたが探しているものであれば、JavaスクリプトでStringをDateに変換するための小さな方法です。

function compareDate(str1){
// str1 format should be dd/mm/yyyy. Separator can be anything e.g. / or -. It wont effect
var dt1   = parseInt(str1.substring(0,2));
var mon1  = parseInt(str1.substring(3,5));
var yr1   = parseInt(str1.substring(6,10));
var date1 = new Date(yr1, mon1-1, dt1);
return date1;
}
50
Mayank

とても簡単

var dt=new Date("2011/11/30");

日付はISO形式yyyy/MM/ddである必要があります。

27
Pearl

まずこのような文字列を抽出します

var dateString = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);

その後、

var d = new Date( dateString[3], dateString[2]-1, dateString[1] );
11
pashaplus

実用的なJavaScriptの仕様に関する問題については、私は Mozilla Developer NetworkJavaScriptリファレンス を強くお勧めします。

で述べているように、あなたが使用する引数の変種についてのDateオブジェクト のトピック:

new Date(year, month, day [, hour, minute, second, millisecond ])

そして、monthパラメータについては、

month1月の0から12月の11までの月を表す整数値。

それから、明らかに、あなたは11月のために月数10を使うべきです。

P.S .: MDNをお勧めする理由は、その正しさ、ものに対する適切な説明、例、およびブラウザの互換性チャートです。

7
Sune Rasmussen

JavaScriptが日付の解析とより一貫しているとは思えません。そして、私はUTCからローカルに変更するつもりはないタイムゾーンがないときにデフォルトが聞こえます - ウェブが準備されることを願っています;)

日付の解析に関しては、Javascriptに大きな負担をかけさせたいと思います。しかし、現地のタイムゾーンの問題をかなり透過的に処理するのがいいでしょう。これらの両方を念頭に置いて、現在の現状でそれを行うための関数があります - そしてJavascriptが変更されてもそれはまだ動作しますが、その後削除することができます。もちろん)。

function strToDate(dateStr)
{
    var dateTry = new Date(dateStr);

    if (!dateTry.getTime())
    {
        throw new Exception("Bad Date! dateStr: " + dateStr);
    }

    var tz = dateStr.trim().match(/(Z)|([+-](\d{2})\:?(\d{2}))$/);

    if (!tz)
    {
        var newTzOffset = dateTry.getTimezoneOffset() / 60;
        var newSignStr = (newTzOffset >= 0) ? '-' : '+';
        var newTz = newSignStr + ('0' + Math.abs(newTzOffset)).slice(-2) + ':00';

        dateStr = dateStr.trim() + newTz;
        dateTry = new Date(dateStr);

        if (!dateTry.getTime())
        {
            throw new Exception("Bad Date! dateStr: " + dateStr);
        }
    }

    return dateTry;
}

関係なくdateオブジェクトが必要です。だからcreateone。タイムゾーンがあれば完了です。それ以外の場合は、+ hh:mm形式を使用してローカルタイムゾーン文字列を作成します(+ hhmmよりも受け入れられます)。

1
Gerard ONeill