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

다음 과 같은 작업을 수행 할 수 있는 setDategetDate 메소드가 있습니다.

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.