回答:
あなたは次のものでそれを作成できます:-
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
var date = new Date();
alert(date.addDays(5));
これにより、必要に応じて月が自動的に増分されます。例えば:
8/31 + 1日は9/1になります。
setDate
直接使用する場合の問題は、それがミューテーターであり、そのようなことを回避するのが最善であることです。ECMAはDate
、不変の構造ではなく、可変クラスとして扱うのに適しています。
864E5
何らかの理由24*60*60
で、私は自分のコードで記述することを好む:)
正解:
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
不正解:
この答えは時々正しい結果を提供しますが、非常にしばしば間違った年と月を返します。この回答が機能するのは、日数を追加する日付に現在の年と月が含まれる場合のみです。
// Don't do it this way!
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
証明/例
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
これは注意が必要な場合があるので注意してください。「明日」を設定すると、現在の値が「今日」の年と月に一致するためにのみ機能します。ただし、「32」のような日付番号に設定しても、通常は翌月に移動しても問題なく機能します。
var d = new Date(); d.setDate( d.getDate() + 1 );
ですか?
getDate()
返します。次に、呼び出しにより、現在の年の日が設定されます。したがって、これは良い一般的な解決策ではありません。@AnthonyWJonesの答えは実際には正しく機能します。setDate
var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)
、2017年1月3日は2年に渡ります。
私の簡単な解決策は:
nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
このソリューションでは、夏時間の問題はありません。また、年、月、日などのオフセットを追加/サブできます。
day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
正しいコードです。
setDate
。
これらの答えは私を混乱させるようです、私は好む:
var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);
getTime()は1970年からミリ秒を提供し、86400000は1日のミリ秒数です。したがって、msには目的の日付のミリ秒が含まれます。
ミリ秒コンストラクタを使用すると、目的の日付オブジェクトが得られます。
new Date(new Date('11/4/2012').getTime() + 86400000)
試す
var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000));
setDate()を使用して日付を追加しても問題は解決しません。2月に数日を追加してみてください。新しい日を追加しようとしても、期待した結果にはなりません。
setDate()
ますか?:それはこれですstackoverflow.com/questions/5497637/...
以下の主要な例に従うと、何年にもわたって、その年の取引が何であるかを考え出そうとせず、追加しませんでした。
単にn日を追加したい場合は、次のようにしてください:
myDate.setDate(myDate.getDate()+ n);
または長いバージョン
var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);
この今日/明日のことは混乱しています。現在の日付を新しい日付変数に設定すると、年の値が台無しになります。元の日付から作業する場合は、作業しません。
可能であれば、moment.jsを使用してください。JavaScriptには、非常に優れたネイティブの日付/時刻メソッドがありません。以下は、モーメントの構文の例です。
var nextWeek = moment().add(7, 'days');
alert(nextWeek);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>
int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);
var days = 2;
var newDate = new Date(Date.now() + days * 24*60*60*1000);
document.write('Today: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);
私は昨夜これらの拡張を作成しました:
。正の値または負の値を渡すことができます。
例:
var someDate = new Date();
var expirationDate = someDate.addDays(10);
var previous = someDate.addDays(-5);
Date.prototype.addDays = function (num) {
var value = this.valueOf();
value += 86400000 * num;
return new Date(value);
}
Date.prototype.addSeconds = function (num) {
var value = this.valueOf();
value += 1000 * num;
return new Date(value);
}
Date.prototype.addMinutes = function (num) {
var value = this.valueOf();
value += 60000 * num;
return new Date(value);
}
Date.prototype.addHours = function (num) {
var value = this.valueOf();
value += 3600000 * num;
return new Date(value);
}
Date.prototype.addMonths = function (num) {
var value = new Date(this.valueOf());
var mo = this.getMonth();
var yr = this.getYear();
mo = (mo + num) % 12;
if (0 > mo) {
yr += (this.getMonth() + num - mo - 12) / 12;
mo += 12;
}
else
yr += ((this.getMonth() + num - mo) / 12);
value.setMonth(mo);
value.setYear(yr);
return value;
}
2番目の変数を使用せずに、7を次のx日で置き換えることができます。
let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
最も簡単な解決策。
Date.prototype.addDays = function(days) {
this.setDate(this.getDate() + parseInt(days));
return this;
};
// and then call
var newDate = new Date().addDays(2); //+2 days
console.log(newDate);
// or
var newDate1 = new Date().addDays(-2); //-2 days
console.log(newDate1);
予想どおりに機能する回答をJasonに感謝します。ここに、コードとAnthonyWJonesの便利な形式の組み合わせを示します。
Date.prototype.addDays = function(days){
var ms = new Date().getTime() + (86400000 * days);
var added = new Date(ms);
return added;
}
後期パーティーに、しかし、あなたが使用している場合モーメントと呼ばれる優秀なプラグインがあります:jQuery
、その後
var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
http://momentjs.com/docs/#/manipulating/
他にもたくさんの良いものがあります!
編集:aikeruのコメントのおかげでjQuery参照が削除されました
パイプライン事業者向けに設計されたソリューション:
const addDays = days => date => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
使用法:
// Without the pipeline operator...
addDays(7)(new Date());
// And with the pipeline operator...
new Date() |> addDays(7);
さらに機能が必要な場合は、date-fnsライブラリを調べることをお勧めします。
古いことは知っていますが、時々私はこれが好きです:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
提案されたソリューションで夏時間の問題がありました。
getUTCDate
/をsetUTCDate
代わりに使用して、問題を解決しました。
// Curried, so that I can create helper functions like `add1Day`
const addDays = num => date => {
// Make a working copy so we don't mutate the supplied date.
const d = new Date(date);
d.setUTCDate(d.getUTCDate() + num);
return d;
}
JavaScriptを使用できます。jQueryは必要ありません。
var someDate = new Date();
var numberOfDaysToAdd = 6;
someDate.setDate(someDate.getDate() + numberOfDaysToAdd);
Formatting to dd/mm/yyyy :
var dd = someDate.getDate();
var mm = someDate.getMonth() + 1;
var y = someDate.getFullYear();
var someFormattedDate = dd + '/'+ mm + '/'+ y;
setDate()のMozillaドキュメントは、月末のシナリオを処理することを示していません。https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Dateを参照してください
setDate()
そのため、日数を追加する必要があるときにsetTime()を使用します。
私も答えを出すつもりです。
個人的には、不要な変数宣言、メソッド呼び出し、コンストラクター呼び出しはすべてパフォーマンスに負荷がかかるため、避けたいと思います。(当然のことながら)
@AnthonyWJonesからの回答の下にコメントとして残すつもりでしたが、よく考えました。
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setTime( 864E5 * days + this.valueOf() ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
上記はDSTを尊重します。DSTをまたぐ日数を追加すると、表示される時間(時間)はそれを反映して変化します。
例:
2014年11月2日02:00がDSTの終わりでした。
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 09:30:00
DST全体で時間を維持したい場合(10:30は10:30のままです)...
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setDate( this.getDate() + days ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
だから、今あなたは...
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 10:30:00
いいえ、JavaScriptには組み込み関数がありませんが、単純なコード行を使用できます
timeObject.setDate(timeObject.getDate() + countOfDays);
私は次のようなものを使用します:
new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
夏時間に対応:
new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
新年に対応:
new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
パラメータ化できます:
function DateAdd(source, amount, step) {
var factor = 1;
if (step == "day") factor = 24 * 60 * 60 * 1000;
else if (step == "hour") factor = 60 * 60 * 1000;
...
new Date(source.getTime() + amount * factor);
}
次の解決策を使用しています。
var msInDay = 86400000;
var daysToAdd = 5;
var now = new Date();
var milliseconds = now.getTime();
var newMillisecods = milliseconds + msInDay * daysToAdd;
var newDate = new Date(newMillisecods);
//or now.setTime(newMillisecods);
Dateには、intを受け入れるコンストラクタがあります。この引数は、1970年1月1日の前後の合計ミリ秒を表します。また、新しいDateオブジェクトを作成せずに同じことを行うsetTimeメソッドもあります。
ここでは、日数をミリ秒に変換し、この値をgetTimeによって提供される値に追加しています。最後に、結果をDate(milliseconds)コンストラクターまたはsetTime(milliseconds)メソッドに渡します。
now.setDate(now.getDate() + days);
DSTの変更を自動的に処理します。また、JSタイムスタンプではうるう秒は無視されます。
編集:(setTime()
またはsetHours()
)の
代わりに、次の方法で行うことができます。
Date.prototype.addDays= function(d){
this.setDate(this.getDate() + d);
return this;
};
var tomorrow = new Date().addDays(1);
古い:
を使用setTime()
する代わりに、以下を使用できますsetHours()
。
Date.prototype.addDays= function(d){
this.setHours(this.getHours() + d * 24);
return this;
};
var tomorrow = new Date().addDays(1);
d.setDate(d.getDate() + 1);
Javaスクリプトで日付を追加する非常に単純なコード。
var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);
ありますSETDATEとのgetdateあなたはこのような何かをできるようにする方法は、:
var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
日数の減算と人間が読める形式の日付の両方をフォーマットする場合はDateHelper
、次のようなカスタムオブジェクトの作成を検討する必要があります。
var DateHelper = {
addDays : function(aDate, numberOfDays) {
aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
return aDate; // Return the date
},
format : function format(date) {
return [
("0" + date.getDate()).slice(-2), // Get day and pad it with zeroes
("0" + (date.getMonth()+1)).slice(-2), // Get month and pad it with zeroes
date.getFullYear() // Get full year
].join('/'); // Glue the pieces together
}
}
// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Add 20 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));
(このフィドルも参照してください)
JavaScriptでプロトタイプを拡張することは良い考えではないかもしれません特にプロのコードベースで。
あなたがしたいことは、ネイティブDate
クラスを拡張することです:
class MyCustomDate extends Date {
addDays(days) {
const date = new MyCustomDate(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
}
const today = new MyCustomDate();
const nextWeek = today.addDays(7)
console.log(nextWeek)
このようにして、JavascriptがネイティブaddDays
メソッドを実装したとしても、何も壊すことはありません。
Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};