JavaScript에서 날짜 증가


답변:


791

세 가지 옵션 :

1. JavaScript Date객체 만 사용 (라이브러리 없음) :

# 1에 대한 나의 이전의 대답은 틀렸다 (24 시간 추가, 일광 절약 시간으로의 전환을 설명하지 못함; 클레버 휴먼 은 동부 표준시에서 2010 년 11 월 7 일에 실패 할 것이라고 지적했다). 대신 Jigar의 답변 은 라이브러리 없이이 작업을 수행하는 올바른 방법입니다.

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

JavaScript 날짜 객체는 롤오버에 대해 똑똑하기 때문에 한 달의 마지막 날에도 작동합니다.

(이 답변은 현재 승인되었으므로 삭제할 수 없습니다. 승인되기 전에 OP에 Jigar를 수락하도록 제안했지만 목록의 항목 # 2 또는 # 3에 대해이 답변을 수락했을 수도 있습니다.)

2. MomentJS 사용 :

var today = moment();
var tomorrow = moment(today).add(1, 'days');

( add새 인스턴스를 반환하지 않고 호출하는 인스턴스 를 수정하면 today.add(1, 'days')수정 today됩니다. 따라서 복제 작업을 시작합니다 var tomorrow = ....)

3. DateJS 사용 하지만 오랜 시간 동안 업데이트되지 않았습니다.

var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();

그러나 document.getElementById ( "arrival_date"). value를 사용하여 변수에 날짜 2010-09-11이 있습니다. 유효하지 않은 날짜가 표시됩니다
Santanu

1
@ 산타 누 : 그것은 완전히 다른 문제입니다 : 날짜 파싱 (문자열을 해석하여 날짜를 얻는 것). 해당 형식이 정적 인 경우 직접 구문 분석하고 결과를 Date생성자 ( new Date(year, month, date))에 제공 할 수 있습니다. 사양 의 섹션 15.9.2.1 참조 ; 다양한 형식을 허용하려면 DateJS를 확인하십시오 .
TJ Crowder

1
@ sanantanu : 위의 내용을 따르기 만하면 일부 브라우저는 해당 형식을 성공적으로 구문 분석 할 수 있습니다 Date.parse(이는 밀리 초를 반환하여 피드 할 수 있음 new Date(ms)). 그러나 브라우저마다 다를 수 있습니다. 최근까지는 구현에서 원하는 모든 작업을 수행 할 수있었습니다 Date.parse. 새로운 5th edition 사양은 이제 최소 형식을 채택해야하지만 아직은 의지하지 않습니다.
TJ Crowder

방금 Date 인스턴스에 초를 추가하고 싶었습니다. 이것은 나를 위해 일했습니다 x = new Date(); x2 = new Date(x.getTime() + 1000).1000은 밀리 초 단위입니다.
berto

1
@ piavgh : 첫 번째 해결책에는 아무런 문제가 없으며 사용 방법입니다. Date객체는 변경 가능합니다. 같은 Date 객체를 배열에 세 번 저장합니다 . 세 개의 다른 Date개체 를 원하면 세 개의 개체를 만들어야합니다.var unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); }
TJ Crowder

178
var myDate = new Date();

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

그러나 document.getElementById ( "arrival_date"). value를 사용하여 변수에 날짜 2010-09-11이 있습니다. 유효하지 않은 날짜가 표시됩니다
Santanu

1
@sanatu :이 경우 브라우저가 허용하는 방식으로 문자열을 형식화해야합니다. Chrome은 허용 new Date("2009-09-11")하지만 Firefox는 허용 하지 않습니다. 대부분의 브라우저는 new Date("2009/09/11")그렇게 쉬운 해결책이 될 것이라고 생각합니다 var arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);.
David Hedlund

5
교체보다 더 단단한 방식 -으로 /와 브라우저가 그것을 받아 들일 것으로 기대는 부분으로 문자열을 분할하는 것입니다 : var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1);우리가 사용하고 있는지 참고 m-1자바 스크립트 개월 열거 값이 (1 월 1이 아닌 0 인)이기 때문에, 여기, 그리고 d+1우리 때문에 '초기 과제에서 이미 증분을 수행 중입니다 (2 월 29 일 등 자동으로 수정됩니다)
David Hedlund

35

이 답변의 예제 중 어느 것도 일광 절약 시간 조정 요일과 작동하지 않는 것 같습니다. 그날 하루의 시간은 24 시간이 아닙니다 ( "스프링 포워드"또는 "폴백"여부에 따라 23 또는 25입니다).

아래의 AddDays 자바 스크립트 함수는 일광 절약 시간제를 설명합니다.

function addDays(date, amount) {
  var tzOff = date.getTimezoneOffset() * 60 * 1000,
      t = date.getTime(),
      d = new Date(),
      tzOff2;

  t += (1000 * 60 * 60 * 24) * amount;
  d.setTime(t);

  tzOff2 = d.getTimezoneOffset() * 60 * 1000;
  if (tzOff != tzOff2) {
    var diff = tzOff2 - tzOff;
    t += diff;
    d.setTime(t);
  }

  return d;
}

함수 테스트에 사용한 테스트는 다음과 같습니다.

    var d = new Date(2010,10,7);
    var d2 = AddDays(d, 1);
    document.write(d.toString() + "<br />" + d2.toString());

    d = new Date(2010,10,8);
    d2 = AddDays(d, -1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

    d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
    d2 = AddDays(d, 1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

    d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
    d2 = AddDays(d, -1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

33

가장 쉬운 방법은 밀리 초로 변환하고 1000 * 60 * 60 * 24 밀리 초를 추가하는 것입니다. 예 :

var tomorrow = new Date(today.getTime()+1000*60*60*24);

나는 정수 표현 규칙을 좋아합니다.
exebook

이것이 가장 좋은 대답입니다. 요청한 일수만큼 쉽게 증감 할 수 있습니다. 1000*60*60*24x 를 곱하여DaysToBeAdded
Khalil Khalaf

또는 new Date(+new Date() + 1000*60*60*24)이지만 실제로 getTime()/ 와 비슷합니다 setTime().
Polv

1
날짜가 UTC 또는 일광 절약 시간 제가없는 다른 시간대가 아니면이 작업을 수행하지 마십시오. 그렇지 않으면 1 년에 2 일 동안 예기치 않은 결과가 발생합니다.
ItalyPaleAle

하나의 라이너 :new Date(Date.now()+1000*60*60*24);
aiyan

28

내일 순수 JS에서 한 줄에 있지만 추한 것입니다 !

new Date(new Date().setDate(new Date().getDate() + 1))

결과는 다음과 같습니다.

Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)

14

다른 사람들의 제안을 따르기 전에 먼저 문자열을 구문 분석해야합니다.

var dateString = "2010-09-11";
var myDate = new Date(dateString);

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

다시 같은 형식으로 되돌리려면 "수동으로"해야합니다.

var y = myDate.getFullYear(),
    m = myDate.getMonth() + 1, // january is month 0 in javascript
    d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");

그러나 다른 답변에서 언급 한대로 Date.js를 얻는 것이 좋습니다 . 많은 도움이 될 것 입니다.


7

나는 .getTime()및 보다 안전한 것이 없다고 생각 .setTime()하므로 이것이 최고이며 성능도 우수해야합니다.

const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS

.setDate() 유효하지 않은 날짜 (예 : 31 + 1)는 너무 위험하며 브라우저 구현에 따라 다릅니다.


5

다음 5 일 얻기 :

var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();


for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}

위의 답변을 시도했지만 헛된 것입니다. 코드는 매력처럼 작동했습니다. 감사!
dimmat

4

두 가지 방법 :

1:

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)

2 : 이전 방법과 유사

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)

2

다음 dateObj.toJSON () 메소드 참조 사용하여 날짜의 문자열 값을 가져 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON 반환에서 슬라이스 날짜를 값을 입력 한 다음 원하는 일 수만큼 증가시킵니다.

var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);

Date.toJSON은 UTC 시간대를 사용합니다. stackoverflow.com/questions/11382606/…
AndreyP

2
 Date.prototype.AddDays = function (days) {
    days = parseInt(days, 10);
    return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}

var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));

결과

2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z

코드가 작동하지 않습니다. 첫 번째 console.log ()로 시도했으며 dt.AddDays ()는 함수가 아닙니다.
Adrian2895

1

BUG (Firefox 32.0.3 및 Chrome 38.0.2125.101 테스트)인지 확실하지 않지만 브라질 (-3 GMT)에서는 다음 코드가 실패합니다.

Date.prototype.shiftDays = function(days){    
  days = parseInt(days, 10);
  this.setDate(this.getDate() + days);
  return this;
}

$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");

결과:

Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200

날짜에 1 시간을 추가하면 완벽하게 작동하지만 문제는 해결되지 않습니다.

$date = new Date(2014, 9, 16,0,1,1);

결과:

Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200

1

내일 날짜를 문자열로 표시합니다. new Date ()를 사용하여 오늘 날짜를 가져오고 Date.getDate () 및 Date.setDate ()를 사용하여 하루를 추가하고 Date 객체를 문자열로 변환합니다.

  const tomorrow = () => {
      let t = new Date();
      t.setDate(t.getDate() + 1);
      return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
        t.getDate()
      ).padStart(2, '0')}`;
    };
    tomorrow();

1

바닐라 js로 날짜 연도 증가 :

start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020

누군가가 날짜 (일) 이외의 다른 값을 늘리려는 경우를 대비하여


1

네이티브 JS를 통해 하루를 추가하려면 다음을 수행하십시오.

let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow

또 다른 옵션은 moment라이브러리 를 사용하는 것입니다 .

const date = moment().add(14, "days").toDate()

1
이 코드의 기능을 설명하십시오. OP 문제를 해결하는 방법에 대한 세부 사항을 추가하십시오.
Yash

1

JavaScript 날짜의 시간대 / 일광 절약 인식 날짜 증분 :

function nextDay(date) {
    const sign = v => (v < 0 ? -1 : +1);
    const result = new Date(date.getTime());
    result.setDate(result.getDate() + 1);
    const offset = result.getTimezoneOffset();
    return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.