JavaScript 날짜에 일 추가


1092

DateJavaScript를 사용하여 현재 날짜를 추가하는 방법 JavaScript에는 .Net과 같은 내장 함수가 AddDay있습니까?

답변:


1208

당신은 하나를 만들 수 있습니다 :-

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불변 구조가 아닌 가변 클래스 로 취급하기에 적합했습니다 .


17
간체 :Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};
— 던컨

27
@Duncan 위와 동일합니까? 이것은 단순히 24 시간을 추가하지만 하루가 항상 24 시간 인 것은 아닙니다 . 질문은 시간 부분을 변경하지 않고 날짜 부분을 1 일씩 늘리는 방법입니다.
— Tamás Bolvári

88
864E5어떤 이유로 나는 24*60*60내 코드 로 작성하는 것을 선호합니다 :)
— Mars Robertson

62
여러분, 864E5를 추가하는 방법을 사용하지 마십시오. 낮이 23 또는 25 시간 일 수있는 일광 절약 시간 차이가 없기 때문입니다.
— sbrbot

12
일광 절약에 대해 걱정하는 사람들은-걱정하지 마십시오. 이 알고리즘은 날짜 해석 방식이 아니라 기본 날짜를 변경합니다. DST는 날짜의 게터와 세터에서 구현됩니다. 게터는 여름에 한 시간을 빼고 세터는 여름에 그 시간을 더하여 시간을 정규화합니다. 그러나 절대 시간을 사용할 때만-상대 시간을 해석 할 필요가 없습니다. 이것이 날짜 수학이 작동하는 이유입니다. IMHO ...
— Gerard ONeill

754

정답 :

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;
}

증명 / 예

이 JsFiddle을 확인하십시오


@bzlm, 예 본질적으로 동일합니다. 날짜 프로토 타입은 수정하지 않습니다. 나는 또한 주요 답변의 결함을 지적하고 싶었습니다.
— 스페어 바이트

허용 된 답변은 2 주 전에 결함을 지적하기 위해 편집되었습니다. 추가 편집이 필요하다고 생각하십니까? 그렇다면 어떻게?
— bzlm

7
@bzlm : 네, 메모 "는이 '에서'날짜가 같은 해에없는 경우이 방법이 실패 읽어야 생각 또는 월 은 AS 현재 날짜 ". 여전히 사용자가 답변을 한 눈에 파악하고 경고가 눈에 띄지 않기 때문에 경고를 읽지 않을 것이라고 걱정합니다. 감사.
— 스페어 바이트

3
이 작업이 정확하지 않다고 생각합니다. Date에는 이러한 생성자가 없습니다. var result = new Date (date); http://www.w3schools.com/js/js_dates.asp를 참조 하십시오 . 이것이 일반적으로 작동하더라도 문자열로의 변환으로 인해 잘못된 결과를 초래할 수 있으며 그 반대의 경우도 있습니다. 그것은해야 VAR 결과 = 새로운 날짜 (date.getTime ());
— Marcin

2
@AnkitBalyan, 다른 답변보기. 일광 절약 시간
— 제로

188
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);

까다로울 수 있으므로주의하십시오. "내일"을 설정하면 현재 값이 "오늘"의 연도 및 월과 일치하므로 작동합니다. 그러나 "32"와 같은 날짜 번호로 설정하면 일반적으로 다음 달로 이동해도 여전히 잘 작동합니다.


1
네? 그러나 이것은 무엇입니까? (2010 년 3 월 31 일에 실행) : today = new Date (); 내일 = 새로운 날짜 (); tomorrow.setDate (today.getDate () + 1); alert (tomorrow.getMonth ()); "3"이라고 말합니다. 경고 (내일); 맞습니다 ... 왜 ???
— d -_- b

12
@sims month는 0 인덱싱됩니다. 3 개월은 4 월
— Joel Coehoorn

6
2 개의 개별 날짜 개체를 만들어야하는 이유는 무엇입니까? 왜 같은 날짜 객체를 사용하지 var d = new Date(); d.setDate( d.getDate() + 1 );않습니까?
— Joseph Silber

8
이 방법은 몇 년 동안 작동하지 않습니다. 시작 날짜가 몇 년 전인 경우 해당 연도getDate() 의 날짜를 반환합니다 . 그런 다음 호출 setDate은 현재 연도 의 요일을 설정합니다 . 따라서 좋은 일반적인 해결책 이 아닙니다 . @AnthonyWJones의 답변은 실제로 올바르게 작동합니다.
— Drew Noakes

3
@ DrewNoakes— 몇 년 동안 작동하지 않는다는 주장은 잘못되었습니다. getDate 는 "해당 날짜"가 아니라 해당 월의 날짜를 반환합니다. 예 : var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)2017 년 1 월 3 일 2 년
— RobG

123

내 간단한 해결책은 다음과 같습니다.

nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);

이 솔루션은 일광 절약 시간제에 문제가 없습니다. 또한 년, 월, 일 등에 대한 오프셋을 추가하거나 대체 할 수 있습니다.

day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);

올바른 코드입니다.


13
참고 : 00:00:00이 재설정 시간은 (문제 여부 될 수 있습니다)
— 알바로 곤잘레스

말한 것처럼 어떤 달의 마지막 날에도 작동하지 않습니다. 일년 중 12 일에 이것을 사용할 수 없게 만듭니다. 디버그하는 악몽처럼 들린다!
— Drew Noakes

6
드류 아니, 일년 내내 하루 종일 사용할 수 있습니다. 날짜 오프셋을 31보다 크게 설정하거나 월 오프셋을 12보다 크게 설정하면이 기능은 다음 달의 일 또는 내년의 월로 다시 계산합니다. 예를 들면 다음과 같습니다. nextday = new Date (oldDate.getFullYear (), oldDate.getMonth (), oldDate.getDate () + 40); 완벽하게 잘 코드입니다.
— sbrbot

getMonth () + 22가 있습니다-어떻게 작동할까요?!
— sbrbot 2016 년

1
동의합니다. 우리가을 사용했기 때문에 일광 절약 시간제 때문에 버그가 발생했습니다 setDate.
— Jelle

95

이 답변은 나에게 혼란스러워 보입니다.

var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);

getTime ()은 1970 년 이후 밀리 초를 제공하며 86400000은 하루의 밀리 초 수입니다. 따라서 ms에는 원하는 날짜의 밀리 초가 포함됩니다.

밀리 초 생성자를 사용하면 원하는 날짜 개체가 제공됩니다.


46
이 솔루션은 일광 절약 시간을 고려하지 않습니다. 예를 들어 23 시간 후에 같은 날짜를 반환합니다. new Date(new Date('11/4/2012').getTime() + 86400000)
— Noah Harrison

6
@NoahMiller 당신이 제기하는 문제는 버그가 아닌 기능 일 수 있습니다! DST를 기준으로 결과 시간을 알기 위해 하루 24 시간을 추가하는 것이 때때로 올바른 일입니다. 예제가 반환하는 날짜의 시간 값은 11 월 4 일 오후 11시이며 특정 날짜의 24 시간 이후입니다. 원래 포스터는 정확한 시간에 대한 열망을 나타내는 것으로 보이는 datetime에 대해 질문했습니다. 당신의 목표가 24 시간 후인 경우에이 대답은 맞습니다.
— Andy Novocin

3
나는 Noah, var d2 = new Date (d1.valueOf () + 24 * 60 * 60 * 1000)에 따르면 하루 종일 진드기를 날짜에 추가합니다.
— Corey Alix

6
이는 일부 경우 (예 : 1 일 쿠키)의 경우에는 정확하며 다른 대부분의 경우보다 간단한 솔루션입니다. / : 너무 많은 downvotes 등 몇 upvotes가 왜 얻을 해달라고
— Matmarbon

48

시험

var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() +  (duration * 24 * 60 * 60 * 1000));

setDate ()를 사용하여 날짜를 추가해도 문제가 해결되지 않으면 2 월에 몇 일을 추가해보십시오. 새 날짜를 추가하려고하면 예상 한 결과를 얻지 못합니다.


26
아니요,이 솔루션에는 매일 24 * 60 * 60 * 1000 초가 있다고 가정하지만 정답이 아닙니다 (일광 절약)!
— sbrbot

'2 월'문제에 대한 증거가 setDate()있습니까? 이것이 바로 : stackoverflow.com/questions/5497637/…
— nobar

9
+1 정답으로 표시해야합니다. "일광 절약"은 프레젠테이션 에 관한 것이며 가치 에 관한 것이 아니라 밀리 초의 수에 불과 하다고 생각합니다 . 에서 값 보기 N'- 포인트 -의 관점에서 동안 날, 밀리 세컨드의 CONST 번호 프리젠 테이션 이 다를 수 있습니다.
— disfated

1
@ disfated— 정답이 아닙니다. 일광 절약 시간 외의 날은 25 시간이지만이 방법은 24를 추가하기 때문에 날짜가 동일합니다. UTC 메서드를 대신 사용하는 경우 24 시간을 사용하여 하루를 나타내는 것이 좋지만 setDate를 사용하는 것이 더 편리한 이유 는 무엇입니까? ;-)
— RobG

38

아래의 주요 예를 따를 때 추가하지 않은 한 해의 거래가 무엇인지 해결하려고 노력하면서 몇 년을 보냈습니다.

당신이 단순히 당신이 가지고있는 날짜에 단순히 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);

오늘 / 내일은 혼란 스럽습니다. 현재 날짜를 새 날짜 변수로 설정하면 연도 값이 엉망이됩니다. 원래 날짜부터 일하면 그렇지 않습니다.


7
이 보석을 찾을 때까지 모든 답을 읽으십시오. 이제 말이됩니다. 오늘 / 내일은 거의 이해가되지 않을 때 거의 모든 답변에 복사되어 있으며, 저자가 가장 많이 답한 답변에서 가장 많이 언급 된 의견으로 "가독성과 명확성을 위해"가 아니라는 점, 그것은 혼란스럽고 나쁜 연습과 잘못입니다
— Cesc

23

가능하면 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>

참조 : http://momentjs.com/docs/#/manipulating/add/


1
@ kpull1 asker는 내장 솔루션이 있는지 묻는 방법으로 솔루션 도메인을 제한하지 않았습니다.
— user2910265

4
현대 메모 : Moment.js는 그러한 작은 목적을 위해 추가하기 가 엄청나게 무겁습니다. 수백 KB이며 웹 패키지에서 즉시 사용할 수 없습니다.
— Joshua Comeau

1
우리가 선호하는 라이브러리는 날짜 -fn입니다. 웹팩 친화적이고 빠르며 날짜를 변경할 수없는 것으로 취급합니다.
— Freewalker

1
@LukeWilliams는 지금까지 date-fns를 들어 본 적이 없습니다. 그것을 확인합니다. 감사.
— user2910265 2016

2
당신이에서 다운로드하는 경우 @JoshuaComeau는 cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/moment.min.js , 그것은 디스크에 53,248 바이트를 차지합니다. 나는 그것이 전체 공 o '왁스라고 상상하지만, 나는 모른다. 어쨌든 별거 아니에요
— birdus

22
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);


2
중간 날짜 변수가 필요없는 공감대.
— Jeff Lowery

이것은 돌연변이가 없기 때문에 가장 좋은 대답입니다
— knocte

매일 24 시간이 아니라 DST와 윤초에 실패합니다.
— Stephan

19

지난 밤에 이러한 확장을 만들었습니다.
양수 또는 음수 값을 전달할 수 있습니다.

예:

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
일광 절약 시간제 경계를 넘는 날짜에는 .addDays () 메서드가 작동하지 않습니다.
— mskfisher

1
이것은 epoc 이후의 밀리 수를 날짜 / 시간을 나타 내기 위해 (올바로) 사용하고 조정을 위해 밀리미터의 양을 추가하기 때문에 여기에 더 좋은 대답 중 하나입니다. 왜 "addMonths"를 위해 이것을 유지하지 않았습니까! ? 그리고 왜 해가 추가되지 않습니까? 지루 했어?
— Robin

개월 이외의 기간은 정적 숫자로 표시 할 수 있습니다. 그러나 달의 길이는 네 가지가 될 수 있습니다. 또한 Days 이상의 기간은 DST에서 가변 길이를 가질 수 있으므로 다른 수준의 복잡성 없이는 시간 기반 추가를 더 이상 사용할 수 없습니다. addYears ()를 추가하고 addMonths ()를 수정했습니다.
— Suamere

14

두 번째 변수를 사용하지 않고 7을 다음 x 일로 바꿀 수 있습니다.

let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));

14

30 일 사용 을 빼 려면 (24h = 86400000ms)

new Date(+yourDate - 30 *86400000)


날짜 시간을 계산할 때는 항상 컴퓨터 과학에서 밀리 초를 기준으로 해당 날짜 시간을 기억하십시오 ( en.wikipedia.org/wiki/System_time#Retrieving_system_time ) new Date (+ yourDate + 30 * (24 * 60 * 60 * 1000))
— Ashraf Abusada

13

가장 간단한 솔루션.

 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);


이것이 최선의 해결책이라고 생각합니다. Date 클래스를 확장하는 경우 Date 인스턴스 자체가 업데이트되는 것이 더 좋습니다.
— Porlune

10

예상대로 작동하는 답변에 대해 Jason에게 감사드립니다. 다음은 코드와 AnthonyWJones의 편리한 형식을 혼합 한 것입니다.

Date.prototype.addDays = function(days){
    var ms = new Date().getTime() + (86400000 * days);
    var added = new Date(ms);
    return added;
}

6
하루에 86400000 초 이상일 때 일광 절약 시간을 고려하지 않으며 코드에 논리적 오류 (프로그램 버그)가 발생할 수 있습니다.
— sbrbot

때로는 필요합니다. eBay API에는 24 시간 기반의 x-day 경매가 있으므로 경매 중 DST 상태가 변경 될 경우 항목이 다른 시간에 종료됩니다. 이 경우 논리적 오류를 피하려면이 유형의 함수를 사용해야합니다.
— Andy Novocin 2016 년

10

파티에 늦게 당신이 사용하는 경우 그러나 jQuery다음 순간이라는 훌륭한 플러그인이있다 :

http://momentjs.com/

var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();

http://momentjs.com/docs/#/manipulating/

그리고 거기에 다른 좋은 것들이 많이 있습니다!

편집 : aikeru의 의견으로 인해 jQuery 참조가 제거되었습니다.


1
순간은 jQuery가 필요하지 않습니다 :)
— aikeru

이 경우에도 더 좋습니다!
— RemarkLima

1
예, Plain ol 'JS와 너무 오랫동안 장난을 친 후에 Moment를 사용했는데 작동합니다 (tm)!
— caseyamcl

몇 줄의 JS가 필요할 때 왜 플러그인을 사용하고 싶습니까?
— frenchie

@frenchie, JS의 몇 줄로 시작하는 것이기 때문에 응용 프로그램에서 날짜, 날짜 및 시간 관련 정보를 명확하게 조작하고 있기 때문에 곧 JS의 1000 줄이 될 것이므로 응용 프로그램을 현지화해야합니다. 12 개 언어 및 시간대로, 당신은 순간과 같은 것을 시작하기를 바랐습니다.)
— RemarkLima

10

파이프 라인 운영자를 위해 설계된 솔루션 :

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 라이브러리를 살펴 보는 것이 좋습니다 .


8

나는 알고 있지만 때때로 나는 이것을 좋아한다.

function addDays(days) {
    return new Date(Date.now() + 864e5 * days);
}

2
이것은 나에게 가장 의미가 있습니다. 간단하고 우아하며 몇 달에 걸쳐 움직이는 문제에 대해기도하지 않습니다.
— uadrive

1
가장 간단한 답변이 제시되었습니다. 이를 바탕으로 프로토 타입 'addDays'는 다음과 같습니다.Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
— CrazyIvan1974

매일 24 시간이 아니라 DST와 윤초에 실패합니다.
— Stephan

8

제안 된 솔루션으로 일광 절약 시간에 문제가있었습니다.

대신 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;
}

8

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;

8

변수가없는 일반 프로토 타입이며 기존 날짜 값에 적용됩니다.

Date.prototype.addDays = function (days) {
    return new Date(this.valueOf() + days * 864e5);
}

7

setDate ()에 대한 mozilla 문서는 월말 시나리오를 처리 할 것임을 나타내지 않습니다. 보다 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date를

setDate ()

  • 현지 시간에 따라 지정된 날짜의 날짜 (1-31)를 설정합니다.

며칠을 추가해야 할 때 setTime ()을 사용하는 이유입니다.


ECMAScript 문서에 링크하지만 PDF로 릴리스됩니다. (
— Blake Mills

1
" setDate ()에 대한 mozilla 문서는 월말 시나리오를 처리 할 것임을 나타내지 않습니다 ". "문서"가 업데이트되었습니다. ;-)
— RobG

7

이처럼 간단합니다.

new Date((new Date()).getTime() + (60*60*24*1000));

2
UTC 날짜가 추가되지만 현지 방법을 사용하고 24 시간이 아닌 현지 날짜를 허용하지 않습니다. 이는 시간대 오프셋이 변경 될 때 발생합니다 (예 : 일광 절약 시간제 및 일광 절약 시간제).
— RobG

6

나는 또한 대답을 줄 것이라고 생각한다.
개인적으로, 나는 무료 변수 선언, 메소드 호출 및 생성자 호출이 모두 성능이 비싸기 때문에 피하려고 노력하고 싶다. (물론, 물론)
@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

6

아니요, 자바 스크립트에는 내장 함수가 없지만 간단한 코드 줄을 사용할 수 있습니다

timeObject.setDate(timeObject.getDate() + countOfDays);

5

나는 다음과 같은 것을 사용한다 :

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);
}

4

다음 솔루션을 사용하고 있습니다.

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) 메서드에 결과를 제공합니다.


매일 24 시간이 아니라 DST와 윤초에 실패합니다.
— Stephan

스테판, 다른 도서관이 그것을 설명합니까?
— Vakhtang

now.setDate(now.getDate() + days);DST 변경을 자동으로 처리합니다. 그리고 JS 타임 스탬프에서는 윤초가 무시됩니다.
— Stephan

4

편집 :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);
— Rivenfall

4

자바 스크립트에서 날짜를 추가하는 매우 간단한 코드입니다.

var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);


4

다음 과 같은 작업을 수행 할 수 있는 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));

( 이 바이올린 참조 )


4

자바 스크립트에서 프로토 타입을 확장 하는 것은 특히 전문적인 코드베이스에서 좋은 생각이 아닐 수 있습니다 .

당신이하고 싶은 것은 네이티브 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메소드를 구현하면 아무 것도 깨지 않을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.