2017-01-24 21 views
0

今日から90日後の日を取得しようとしています。これは私のコードです:2017-04-24T15:17:42.641Z:私はthreeMonthsFromTodayを印刷するとき今日からnヶ月後のJavascript

var today = new Date(); 
var threeMonthsFromToday = new Date(today.setDate(today.getDate() + 90)); 

、私は正しい日付を取得します。しかし、私はこのコードを使用してフォームdd/mm/yyyyにあるように日付を再フォーマットしようとすると:24/31/2017

var day = ('0' + threeMonthsFromToday.getDate()).slice(-2); 
var month = ('0' + threeMonthsFromToday.getMonth() + 1).slice(-2); 
var year = threeMonthsFromToday.getFullYear(); 
var date = day + '/' + month + '/' + year; 

私は完全に異なると無効な日付を取得します。

私はこれを数時間デバッグしていますが、私が間違っていることを理解できないようです。

+2

moment.jsを使用することを検討してください:) –

+2

私はあなたが今、90日に考慮する必要があるとしてmoment.jsするには、上記参照に同意ちょうど3ヶ月などではない..です頭痛のロットを回避することができます。 – Pogrindis

+0

@ Pogrindis-moment.jsはそれを全く助けません。ここの問題は実際には日付とは関係がありませんが、それは "+"句読点の誤った使用に関するものです。 – RobG

答えて

6

まあ、'0' + threeMonthsFromToday.getMonth()はあなたの文字列を与える:"03"あなたはスライス前の月のあなたの"031"を与える文字列に変換1を追加します。

使用この:以下

var month = ('0' + (threeMonthsFromToday.getMonth() + 1)).slice(-2); 
+0

良い説明。 – bobjoe

+0

このようなルーキーミスで私はこの多くの時間を無駄にしたとは思えません。D ありがとうございました! – SalmaFG

0

あなたはarithematic 1

var today = new Date(); 
 
var threeMonthsFromToday = new Date(today.setDate(today.getDate() + 90)); 
 
var day = ('0' + threeMonthsFromToday.getDate()).slice(-2); 
 
var month = ('0' + (threeMonthsFromToday.getMonth()+1)).slice(-2); 
 
var year = threeMonthsFromToday.getFullYear(); 
 
var date = day + '/' + month + '/' + year; 
 
console.log(date);
を得るようにあなたのためのトリックがそれに "0" を追加する前に getMonth()+1 ...ん

2

あなたはここで基本的なBODMASルールが欠落し

を次のようにコードを変更してくださいされています
var today = new Date(); 
var threeMonthsFromToday = new Date(today.setDate(today.getDate() + 90)); 
var day = ('0' + threeMonthsFromToday.getDate()).slice(-2); 
var month = ('0' + (threeMonthsFromToday.getMonth() + 1)).slice(-2); 
var year = threeMonthsFromToday.getFullYear(); 
var date = day + '/' + month + '/' + year; 

操作は左から右に実行されるため、月は文字列に変換されてから数値に追加されます。ブラケットを含めると、まずブラケットの中で操作を実行し、次にそれを文字列にします。

+3

BODMAがOPを傷つける理由についてのスニペットを含めるといいでしょう。特に私は前の言葉を聞いていなかったので、操作の命令だけです。 – krillgar

0

これは動作するはずです。

var day = threeMonthsFromToday.getDate() 
if(day < 10){ 
    day = '0' + day 
} 
var month = threeMonthsFromToday.getMonth()+1 
if(month<10){ 
    month = '0' + month 
} 
var year = threeMonthsFromToday.getFullYear() 
var date = day + '/' + month + '/' + year 
0

使用単純toLocaleDateString方法

toLocaleDateString()メソッドこの日付の日付部分の言語に敏感な表現の文字列を返します。

var today = new Date(); 
 
var threeMonthsFromToday = new Date(today.setDate(today.getDate() + 90)); 
 

 
var date = threeMonthsFromToday.toLocaleDateString(); 
 

 
console.log(date);

//result in console : "24/04/2017" 

あなたのコンソール上でそれを試してみてください。

+0

* toLocaleString *は実装に依存する**文字列を返します。異なるホストでは結果が異なるため、日付の書式設定(たとえばChrome)のシステム設定は無視されることがあります。 ECMA-402拡張が使用されていないかサポートされていない場合、[* ECMA-262 *](http://ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring) * Stringの内容はインプリメンテーション依存ですが、現在のタイムゾーンの日付を、ホスト環境の現在のロケールの規則に対応した、人間が読める形式で簡潔に表現することを意図しています。* " – RobG

2

toLocaleStringを使用できますか?

+0

* toLocaleString *は完全に実装依存であり、異なるホストで異なる結果を生成する可能性があります。 Safari、Firefox、またはChromeでOPの必要な結果が得られません。 :-( – RobG

関連する問題