1

私は常にこの形式の文字列を持っています: 2012 年 5 月 7 日または 2012 年 5 月 17 日 私の目標は、この文字列を解析し、この形式で日付を取得することです: yyyy-mm-dd

したがって、私の例では、2012 年 5 月 7 日は 2012-05-07 になり、2012 年 5 月 17 日は 2012-05-17 になります。

私は試してみました

Date.parse("7 May 2012", "yyyy-mm-dd") 

しかし、結果は次のとおりです。

Sun May 20 2012 00:00:00 GMT+0200 (CEST)

ご助力ありがとうございます。

4

2 に答える 2

2

Date.parseどこで呼び出したのかわかりませんが、JavaScriptDate.parseには 2 番目の引数がありません。

これを行うには、文字列を自分で解析するか、MomentJSなどを使用して解析する必要があります。自分で解析したい場合は、おそらく正規表現とルックアップ テーブル (月名用) が必要になるでしょう。正規表現は次のようになります。

var parts = /^\s*(\d+)\s+([A-Za-z]+)\s+(\d+)\s*$/.exec(str);

...parts[0]日、parts[1]月の名前、parts[2]年になります。次に、月を小文字または大文字に変換し、ルックアップ テーブルを使用して月名を月番号にマップします。次の行に沿って何かを行います。

var months = {
    "jan": 0,
    "january": 0,
    "feb": 1,
    "february": 1,
    "may": 4,
    // ...
    "dec": 11,
    "december": 11
};
var parts = /^\s*(\d+)\s+([A-Za-z]+)\s+(\d+)\s*$/.exec(str);
var dt;
if (parts) {
    parts[2] = months[parts[2].toLowerCase()];
    if (typeof parts[2] !== "undefined") {
        dt = new Date(parseInt(parts[3], 10),
                      parts[2],
                      parseInt(parts[1], 10));
    }
}

実例| ソース

Date次に、結果のオブジェクトをフォーマットできます。(繰り返しますが、そこで役立つライブラリがあります。)

または、もちろん、実際に を作成せず、Dateから直接フォーマットするだけですparts

于 2012-07-26T14:25:31.817 に答える
2

それはどのようDate.parseに機能するかではなく、1 つのパラメーターだけを受け取り、UNIX タイムスタンプを返します。

Dateオブジェクトが必要な場合は、 を使用しますnew Date

var myDate = new Date("7 May 2012");
// Mon May 07 2012 00:00:00

その後、自分で解析して、必要な形式にすることができます。

var year = myDate.getFullYear(),
    month = myDate.getMonth() + 1, // month returns 0-11, not 1-12
    day = myDate.getDate();
var dateStr = year + '-' + (month < 10 ? 0 : '') + month + '-' + (day < 10 ? 0 : '') + day;

:"7 May 2012"は非標準の日付形式であり、すべてのブラウザーで正しく機能しない場合があります。

注 2 : すべてのブラウザで動作することを 100% 確実にするために、次のようなライブラリを使用しますDatejs

// Using Date.js
var myDate = Date.parse('7 May 2012');
var dateStr = myDate.toString('yyyy-MM-dd');
于 2012-07-26T14:25:49.350 に答える