2016-09-20 13 views
-1

日付をmm-dd-yyyyの形式に変換する必要があります。だから私はこのような方法を使用:JavaScriptの日付()はタイムゾーンが変更されると異なります

var dt=new Date(2016-06-21); 

var ddte=''; 

ddte=(("0" + (dt.getMonth() + 1)).slice(-2))+"-"+(("0" + dt.getDate()).slice(-2))+"-"+dt.getFullYear(); 

それは私のローカルタイムゾーン(GMT+05:30)で正常に動作します。しかし、私がGMT -5:00に自分のタイムゾーンを変更すると、それは間違った結果をもたらします:06-20-2016。私が望む結果は06-21-2016です。

  1. 誰でも問題を説明できますか?

  2. どうすれば正しい結果が得られますか?

  3. バグですか?

+1

するvar dtは=新しいDate( '2016年6月21日を'); Date(2016-06-21)の代わりに.Single quote missing。 – ADarnal

+0

どのようにタイムゾーンを変更していますか? – Yoshiya

+0

なぜバグですか?おそらくそのタイムゾーンは現在の日です。 – Laurianti

答えて

1

Date()コンストラクタに渡された日付は、UTCタイムゾーンとして扱われます。 Date.getMonth()で時刻を取得すると、あなたのローカルタイムゾーンが取得されます。あなたはおそらくDate.getUTCMonth()を探しています。

var dt=new Date("2016-06-21"); 
 

 
var ddte=''; 
 

 
ddte=(("0" + (dt.getUTCMonth() + 1)).slice(-2))+"-"+(("0" + dt.getUTCDate()).slice(-2))+"-"+dt.getUTCFullYear(); 
 

 
console.log(ddte);

この場合には、私は全くDateを使用するための一切の使用を参照してくださいませんが。これで十分です:

var parsedDate = "2016-06-21".replace(/(\d{4})-(\d{2})-(\d{2})/, "$2-$3-$1"); 
 
console.log(parsedDate);

0

バグではありません。それは、タイムゾーンがどのように機能するか(同時に世界のどこでも同じ暦日ではありません)です。

実際に高度な日付機能を使用したくない場合は、最初の場所でDateを使用しないでください。

var parts = "2016-06-21".split("-"); 
var mdy = parts[1] + "-" + parts[2] + "-" + parts[0]; 

エラーチェックを追加すると完了です。

+0

ダンノーなぜダウン投票、これは賢明な答えです。 – RobG

+0

@RobG心配する必要はありません。他の質問に誰かを怒らせたようです。私は昨日から奇妙なdownvotesを持っています。 –

関連する問題