etc./StackOverFlow

JavaScript 날짜에 날짜 추가

청렴결백한 만능 재주꾼 2023. 4. 9. 15:43
반응형

질문자 :Ashesh


JavaScript를 사용하여 Date 를 추가하는 방법. AddDay 와 같은 기능이 내장되어 있습니까?



다음을 사용하여 만들 수 있습니다.

 Date.prototype.addDays = function(days) { var date = new Date(this.valueOf()); date.setDate(date.getDate() + days); return date; } var date = new Date(); console.log(date.addDays(5));

필요한 경우 자동으로 월을 증가시킵니다. 예를 들어:

8/31 + 1일은 9/1이 됩니다.

setDate 직접 사용하는 경우의 문제는 이것이 mutator이고 그런 종류의 일은 피하는 것이 가장 좋다는 것입니다. Date 를 변경할 수 없는 구조가 아닌 변경 가능한 클래스로 취급하는 것이 적합하다고 생각했습니다.


AnthonyWJones

정답 :

 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을 확인하십시오

 // Correct function addDays(date, days) { var result = new Date(date); result.setDate(result.getDate() + days); return result; } // Bad Year/Month function addDaysWRONG(date, days) { var result = new Date(); result.setDate(date.getDate() + days); return result; } // Bad during DST function addDaysDstFail(date, days) { var dayms = (days * 24 * 60 * 60 * 1000); return new Date(date.getTime() + dayms); } // TEST function formatDate(date) { return (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear(); } $('tbody tr td:first-child').each(function () { var $in = $(this); var $out = $('<td/>').insertAfter($in).addClass("answer"); var $outFail = $('<td/>').insertAfter($out); var $outDstFail = $('<td/>').insertAfter($outFail); var date = new Date($in.text()); var correctDate = formatDate(addDays(date, 1)); var failDate = formatDate(addDaysWRONG(date, 1)); var failDstDate = formatDate(addDaysDstFail(date, 1)); $out.text(correctDate); $outFail.text(failDate); $outDstFail.text(failDstDate); $outFail.addClass(correctDate == failDate ? "right" : "wrong"); $outDstFail.addClass(correctDate == failDstDate ? "right" : "wrong"); });
 body { font-size: 14px; } table { border-collapse:collapse; } table, td, th { border:1px solid black; } td { padding: 2px; } .wrong { color: red; } .right { color: green; } .answer { font-weight: bold; }
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <table> <tbody> <tr> <th colspan="4">DST Dates</th> </tr> <tr> <th>Input</th> <th>+1 Day</th> <th>+1 Day Fail</th> <th>+1 Day DST Fail</th> </tr> <tr><td>03/10/2013</td></tr> <tr><td>11/03/2013</td></tr> <tr><td>03/09/2014</td></tr> <tr><td>11/02/2014</td></tr> <tr><td>03/08/2015</td></tr> <tr><td>11/01/2015</td></tr> <tr> <th colspan="4">2013</th> </tr> <tr> <th>Input</th> <th>+1 Day</th> <th>+1 Day Fail</th> <th>+1 Day DST Fail</th> </tr> <tr><td>01/01/2013</td></tr> <tr><td>02/01/2013</td></tr> <tr><td>03/01/2013</td></tr> <tr><td>04/01/2013</td></tr> <tr><td>05/01/2013</td></tr> <tr><td>06/01/2013</td></tr> <tr><td>07/01/2013</td></tr> <tr><td>08/01/2013</td></tr> <tr><td>09/01/2013</td></tr> <tr><td>10/01/2013</td></tr> <tr><td>11/01/2013</td></tr> <tr><td>12/01/2013</td></tr> <tr> <th colspan="4">2014</th> </tr> <tr> <th>Input</th> <th>+1 Day</th> <th>+1 Day Fail</th> <th>+1 Day DST Fail</th> </tr> <tr><td>01/01/2014</td></tr> <tr><td>02/01/2014</td></tr> <tr><td>03/01/2014</td></tr> <tr><td>04/01/2014</td></tr> <tr><td>05/01/2014</td></tr> <tr><td>06/01/2014</td></tr> <tr><td>07/01/2014</td></tr> <tr><td>08/01/2014</td></tr> <tr><td>09/01/2014</td></tr> <tr><td>10/01/2014</td></tr> <tr><td>11/01/2014</td></tr> <tr><td>12/01/2014</td></tr> <tr> <th colspan="4">2015</th> </tr> <tr> <th>Input</th> <th>+1 Day</th> <th>+1 Day Fail</th> <th>+1 Day DST Fail</th> </tr> <tr><td>01/01/2015</td></tr> <tr><td>02/01/2015</td></tr> <tr><td>03/01/2015</td></tr> <tr><td>04/01/2015</td></tr> <tr><td>05/01/2015</td></tr> <tr><td>06/01/2015</td></tr> <tr><td>07/01/2015</td></tr> <tr><td>08/01/2015</td></tr> <tr><td>09/01/2015</td></tr> <tr><td>10/01/2015</td></tr> <tr><td>11/01/2015</td></tr> <tr><td>12/01/2015</td></tr> </tbody> </table>


sparebytes

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

까다로울 수 있으므로 주의하십시오. tomorrow 설정하면 today 의 연도와 월과 일치하기 때문에 작동합니다. 그러나 "32"와 같은 날짜 번호로 설정하면 일반적으로 다음 달로 이동하는 데 문제가 없습니다.


Joel Coehoorn

내 간단한 솔루션은 다음과 같습니다.

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

이 솔루션은 일광 절약 시간제에 문제가 없습니다. 또한 연, 월, 일 등의 오프셋을 추가/하위할 수 있습니다.

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

올바른 코드입니다.


sbrbot

이 답변은 나에게 혼란스러워 보이지만 다음을 선호합니다.

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

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

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


Jason

노력하다

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

setDate()를 사용하여 날짜를 추가해도 문제가 해결되지 않습니다. 2월 달에 며칠을 추가해 보십시오. 새 날짜를 추가하려고 하면 예상한 결과가 나오지 않습니다.


sufyan.shoaib

아래의 주요 예를 따를 때 추가하지 않은 연도의 거래가 무엇인지 알아내기 위해 오랜 시간을 보냈습니다.

단순히 날짜에 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);

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


Rumpleteaser

다음은 Javascript에서 특정 날짜에 일, 월, 연도를 추가하는 데 사용하는 방법입니다.

 // To add Days var d = new Date(); d.setDate(d.getDate() + 5); // To add Months var m = new Date(); m.setMonth(m.getMonth() + 5); // To add Years var m = new Date(); m.setFullYear(m.getFullYear() + 5);

Hasee Amarathunga

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


serge

가능하다면 moment.js를 사용하세요. JavaScript에는 매우 좋은 기본 날짜/시간 메서드가 없습니다. 다음은 Moment 구문의 예입니다.

 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/


user2910265

내가 구현한 가장 간단한 방법은 Date() 자체를 사용하는 것입니다. `

 const days = 15; // Date.now() gives the epoch date value (in milliseconds) of current date nextDate = new Date( Date.now() + days * 24 * 60 * 60 * 1000)

`


RameshD

어제 밤에 다음 확장을 만들었습니다.
양수 또는 음수 값을 전달할 수 있습니다.

예시:

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

mark.nino.chua

가장 간단한 대답은 현재 날짜에 1일을 추가해야 한다고 가정하는 것입니다.

 var currentDate = new Date(); var numberOfDayToAdd = 1; currentDate.setDate(currentDate.getDate() + numberOfDayToAdd );

이 코드가 하는 일을 한 줄 한 줄 설명하자면:

  1. currentDate라는 이름의 현재 날짜 변수를 만듭니다. 기본적으로 "new Date()"는 현재 날짜를 변수에 자동으로 할당합니다.
  2. 날짜에 추가 할 일 수를 저장하는 변수를 만듭니다(이 변수를 건너뛰고 세 번째 줄의 값을 직접 사용할 수 있음).
  3. 동일한 값 + 원하는 숫자를 지정하여 Date 값을 변경합니다 (Date는 개체에 저장된 월의 날짜이기 때문에). 다음 달로의 전환은 자동입니다.

NicoESIEA

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

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


sdgfsdh

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

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

vaibhavmaster

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

 new Date(+yourDate - 30 *86400000) 

 var yourDate=new Date(); var d = new Date(+yourDate - 30 *86400000) console.log(d)


Kamil Kiełczewski

가장 간단한 솔루션.

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


ampachts

파티에 jQuery 를 사용하는 경우 Moment라는 훌륭한 플러그인이 있습니다.

http://momentjs.com/

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

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

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

편집:ikeru의 의견 덕분에 jQuery 참조가 제거되었습니다.


RemarkLima

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;

Rohit.007

다음과 같이 간단합니다.

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

Dila Gurung

예상대로 작동하는 답변에 대해 Jason에게 감사드립니다. 여기에 귀하의 코드와 AnthonyWJones의 편리한 형식이 혼합되어 있습니다.

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

Oli

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

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

Todd

아니요, javascript에는 내장 함수가 없지만 간단한 코드 줄을 사용할 수 있습니다.

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

Vahag Chakhoyan

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

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

Joshua Comeau

왜 그렇게 복잡합니까?

days_to_add라는 변수에 추가할 일 수를 저장한다고 가정해 보겠습니다.

그런 다음이 짧은 작업을 수행해야 합니다.

 calc_date = new Date(Date.now() +(days_to_add * 86400000));

Date.now()를 사용하면 실제 유닉스 타임스탬프를 밀리초로 얻은 다음 날짜를 추가하려는 만큼 밀리초를 추가합니다. 하루는 24h 60min 60s*1000ms = 86400000ms 또는 864E5입니다.


Alexander Behling

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

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

Matteo Conta

setDate()에 대한 mozilla 문서는 월말 시나리오를 처리할 것이라고 표시하지 않습니다. https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date 참조

날짜 설정()

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

그래서 날짜를 추가해야 할 때 setTime()을 사용합니다.


Blake Mills

나는 또한 대답을 줄 것 같다:
개인적으로 저는 불필요한 변수 선언, 메서드 호출 및 생성자 호출을 피하려고 시도합니다. 모두 성능면에서 비용이 많이 들기 때문입니다. (물론 합리적인 범위 내에서)
@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

Duncan

나는 다음과 같은 것을 사용합니다.

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

kpull1

편집: 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을 참조하십시오 ...


spaark

출처 : http:www.stackoverflow.com/questions/563406/add-days-to-javascript-date

반응형