2017-09-28 5 views
1

ユーザーが特定の年と月にトランザクションをリクエストできるAPIを開発しています。私は日付を操作するためのAPIとmomentjsを構築するためにExpressJSを使用しています Date()コンストラクターでJavascriptが正しく機能しない

routes.get('/transactions/:member_id/:year/:month', (req, res) => { 
    let {member_id, year, month} = req.params; 
    let start_date = new Date(year, month - 1, 1); 
    let end_date = moment(start_date).add(1, 'months'); 

    console.log({start_date, end_date}); 
    res.send({start_date, end_date}) 
}); 

のようにAPIが見えます。 (私は上記の私の実装で month - 1を行う理由です)私は http://localhost:8080/transactions/m/2017/10としてこのAPIを打つ

は、私は、ユーザー m、今年 2017と10月で月 10のための取引をお願いします。

私は戻ってconsoleで取得すると、月の開始日が1

let start_date = new Date(year, month - 1, 1); 

なく30としてハードコードされているので、私は混乱しています

{ start_date: 2017-09-30T11:00:00.000Z, 
    end_date: moment("2017-11-01T00:00:00.000") } 

です。ここで何がうまくいかないのですか?

+1

おそらく、GMTで時刻を指定しているが、コンソール出力が別のタイムゾーンにあるためです。 – jfriend00

+0

これは、あなたのタイムゾーンがGMT + 13であることを示唆していますか?ああ、待って...またはGMT + 12、10月1日現在の夏時間ですか? –

答えて

1

これはタイムゾーンの問題です。あなたができることは:

let start_date = new Date(year, --month); 
start_date.setUTCDate(1); 

JavaScript Date()はクライアントのローカルタイムゾーンを使用します。一貫性のある結果を得るために、JavaScript Date()には、GMT世界標準時に基づいて日付を標準化するためのutcメソッドがあります。これは、タイムゾーンの問題のように見えるん

let start_date = new Date(Date.UTC(year, --month, 1)); 
+0

文をバックアップするための参照を追加できますか? –

+0

ありがとうございますが、あなたの答えにこれを追加する必要があります:) –

+0

ありがとうございます。私はそれをしていたはずです。これを指摘してくれてありがとう。 :) –

0

:またMDN's JavaScript Date Reference

をチェックし、あなたもこれを行うことができます。

お客様のクライアントでは、Date.prototype.getTimeZoneOffset()を使用して日付に追加することができます。 しかし、あなたはあなたのURLにいくつかの時間パラメータを加えなければならないでしょう。

ああタイムゾーン。芸術では冷たい心の愛人ですが。

関連する問題