답변:
당신은 하나를 만들 수 있습니다 :-
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()
의 날짜를 반환합니다 . 그런 다음 호출 setDate
은 현재 연도 의 요일을 설정합니다 . 따라서 좋은 일반적인 해결책 이 아닙니다 . @AnthonyWJones의 답변은 실제로 올바르게 작동합니다.
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은 하루의 밀리 초 수입니다. 따라서 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;
}
두 번째 변수를 사용하지 않고 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;
}
jQuery가 필요하지 않은 JavaScript를 사용할 수 있습니다.
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
나는 다음과 같은 것을 사용한다 :
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);
JSFiddle을 참조하십시오 ...
d.setDate(d.getDate() + 1);
다음 과 같은 작업을 수행 할 수 있는 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));
( 이 바이올린 참조 )
자바 스크립트에서 프로토 타입을 확장 하는 것은 특히 전문적인 코드베이스에서 좋은 생각이 아닐 수 있습니다 .
당신이하고 싶은 것은 네이티브 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);};