현재 날짜에 1 일을 추가하려면 어떻게해야합니까?


93

JavaScript Date 개체를 사용하여 하루 씩 증가해야하는 현재 Date 개체가 있습니다. 다음 코드가 있습니다.

var ds = stringFormat("{day} {date} {month} {year}", { 
                day: companyname.i18n.translate("day", language)[date.getUTCDay()], 
                date: date.getUTCDate(), 
                month: companyname.i18n.translate("month", language)[date.getUTCMonth()], 
                year: date.getUTCFullYear() 
});

하루를 추가하려면 어떻게해야합니까?

나는에 +1을 추가 한 getUTCDay()하고 getUTCDate()있지만위한 '일요일'이 표시되지 않습니다 day내가 일을 기대하고있다.


1
"+1 추가"란 무엇을 의미합니까? 다음날 또는 다른 것이 필요합니까?
Aleks G

않습니다 date: (date.getUTCDate()+1)(나를 위해 일을) 작동하지? 로 명명 충돌이 있음이 가능 date(날짜 ()로 - 객체 객체의 다른 - 당신은 () 날짜를 호출하려고 객체 키로 되세요.
도미니크 슈라이버

현재 <option value = "2012-04-06"> 2012 년 4 월 6 일 토요일 </ option> <option value = "2012-04-07"> 2012 년 4 월 7 일 </ option>, '일요일'로만 표시됩니다. 2012 년 4 월 7 일 "
franticfrantic

따라서 7 Apr필요한 것은 아닙니다 ( '다음 날 추가'가 무엇입니까) Sunday. 및 (또는 현재 답변에서 언급했듯이 이전에) +1모두 추가해야합니다 . day:date:
Dominik Schreiber 2012

답변:


237

날짜 개체에 하루를 추가하려면 :

var date = new Date();

// add a day
date.setDate(date.getDate() + 1);

중복 질문 참조 : stackoverflow.com/questions/3674539/… . 이 대답은 좋지만 DST를 고려하지 않습니다. 24 시간이없는 연중 2 일이 있습니다.
Jess

2
@Jess-DST에 대한 변경 사항을 표시하는 방법에 따라 다릅니다. 질문은 날짜에 하나를 추가하는 방법을 물었고 위의 답변이 정확히하는 일입니다. 24 시간을 추가한다고해서 반드시 해당 날짜가 증가하는 것은 아니며 setDate를 사용하여 현지 날짜에 하나를 추가하면 항상 증가합니다 .
RobG

제가 의미하는 바는 다음과 같습니다. 3 월 10 일 증분 : var a = new Date("2013-03-10T00:00:00.000Z"); a.setDate(a.getDate() + 1); a.toISOString();입니다 "2013-03-10T23:00:00.000Z". 위의 기능이 작동하지 않는 미묘한 경우입니다.
Jess

1
당연히 아니지! UTC 시간으로 시작한 다음 기본적으로 현지 시간으로 변환하고 하루를 추가 한 다음 다시 UTC로 변환합니다. 따라서 현지 날짜에 하루가 추가 되었지만 UTC 시간은 23 시간입니다. UTC 날짜에 1을 더하면 현지 시간으로 01:00:00으로 돌아갑니다. 이 동작은 일광 절약에만 해당되는 것이 아니라 세 가지 다른 시간대를 사용한 결과입니다.
RobG 2014 년

8
아하. getDate 가 UTC에서 현지 시간으로 변환하는 것을 몰랐 습니다. a.setUTCDate(a.getUTCDate() + 1);<-Zulu 날짜와 함께 작동합니다.
Jess

40

내 겸손한 의견으로는 가장 좋은 방법은 밀리 초 단위로 하루를 추가하는 것입니다. 코드를 인수하는 방법에 따라 매월 마지막 날에 엉망이 될 수 있습니다.

예 : 2 월 28 일 또는 3 월 31 일.

다음은 내가 어떻게 할 것인지에 대한 예입니다.

var current = new Date(); //'Mar 11 2015' current.getTime() = 1426060964567
var followingDay = new Date(current.getTime() + 86400000); // + 1 day in ms
followingDay.toLocaleDateString();

imo 이것은 정확성을 보장합니다

여기에 또 다른 예가 있습니다. 나는 그것이 당신을 위해 일할 수 있지만 위의 복용량만큼 깨끗하지는 않습니다.

var today = new Date('12/31/2015');
var tomorrow = new Date(today);
tomorrow.setDate(today.getDate()+1);
tomorrow.toLocaleDateString();

imho this === '똥'

그래서 여러분 중 일부는 일광 절약 시간 때문에 제 밀리 초 접근 방식에 대해 불만을 가지고 있습니다. 그래서 나는 이것을 부술 것입니다. 첫째, 일부 국가 및 주에는 일광 절약 시간이 없습니다. 두 번째 정확히 24 시간을 더하는 것은 하루 종일입니다. 날짜 번호가 1 년에 한 번 변경되지 않고 6 개월 후에 수정되면 문제가 발생하지 않습니다. 그러나 명확하고 사악한 Date () 할당을 처리해야 할 목적으로 나는 이것을 생각했고 이제는 Date를 철저히 싫어합니다. 그래서 이것이 나의 새로운 접근 방식입니다

var dd = new Date(); // or any date and time you care about 
var dateArray =  dd.toISOString().split('T')[0].split('-').concat( dd.toISOString().split('T')[1].split(':') );
// ["2016", "07", "04", "00", "17", "58.849Z"] at Z 

이제 재미있는 부분입니다!

var date = { 
    day: dateArray[2],
    month: dateArray[1],
    year: dateArray[0],
    hour: dateArray[3],
    minutes: dateArray[4],
    seconds:dateArray[5].split('.')[0],
    milliseconds: dateArray[5].split('.')[1].replace('Z','')
}

이제 우리는 Zulu 자오선에 명확하게 작성된 공식 유효 국제 날짜 개체를 가지고 있습니다. 이제 날짜를 변경하려면

  dd.setDate(dd.getDate()+1); // this gives you one full calendar date forward
  tomorrow.setDate(dd.getTime() + 86400000);// this gives your 24 hours into the future. do what you want with it.

초 / 밀리 초를 추가하면 일광 절약 시간이 적용되지 않습니다.
Matt H

@Matt H는 어디서 그 아이디어를 얻었습니까? 시간은 1970/01/01
Peter the Russian

1
UTC 시간으로 다음 날이 될 것이지만 반드시 현지 시간은 아닙니다. 미국의 Spring Forward 날에는 하루에 25 시간이 있습니다. 따라서 예를 들어 00:00 시간에 3/31/15가 있고 86400000 밀리 초를 더하면 Sprint Forward day에 현지 시간은 그날 25 시간이 있기 때문에 23:00시에 3/31/15가됩니다.
Matt H

3
다음과 같은 효과를 볼 수 있습니다.var dte = Date.parse('2015-11-01'); console.log(dte); dte.setTime(dte.getTime() + 86400000 ); console.log(dte);
Matt H

1
이것은 과도하게 설계되었습니다. 이와 같은 문제가있는 경우 모멘트와 같은 라이브러리를 사용하여 작업을 더 쉽게 할 수 있습니다.
Joshua Michael Wagoner


9
int days = 1;
var newDate = new Date(Date.now() + days*24*60*60*1000);

CodePen

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


일광 절약 시간제를 준수하는 장소에서 모든 날이 24 시간이 아니기 때문에 1 일 밀리 초를 추가 할 수 없습니다. 예를 들어 칠레는 2017 년 5 월 14 일 자정에 일광 절약 시간제를 종료합니다. 시계는 자정에서 23:00으로 되돌아갑니다. 따라서 2017-05-13 00:00:00에 24 시간을 추가하면 2017-05-13 23:00:00이 생성되고 날짜는 변경되지 않습니다 (일부 브라우저는 정확히 자정에, 다른 브라우저는 1 밀리 초 후에 수행합니다). . :-(
RobG

2

이 질문 에서 jpmottin 에서 영감을 얻은 한 줄 코드는 다음과 같습니다.

var dateStr = '2019-01-01';
var days = 1;

var result = new Date(new Date(dateStr).setDate(new Date(dateStr).getDate() + days));

document.write('Date: ', result); // Wed Jan 02 2019 09:00:00 GMT+0900 (Japan Standard Time)
document.write('<br />');
document.write('Trimmed Date: ', result.toISOString().substr(0, 10)); // 2019-01-02

도움이 되었기를 바랍니다


-3
currentDay = '2019-12-06';
currentDay = new Date(currentDay).add(Date.DAY, +1).format('Y-m-d');

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