현재 날짜로부터 30 일 전에받는 방법은 무엇입니까?


95

시작 달력 입력 상자와 끝 달력 입력 상자가 있습니다. 기본 시작 달력 입력 상자는 현재 날짜 30 일 전이고 종료 달력 입력 상자는 현재 날짜가됩니다. 여기 내 데이트 변수가 있습니다.

var today = new Date(),
    dd    = today.getDate(),
    mm    = today.getMonth(),
    yyyy  = today.getFullYear(),
    month = ["January", "February", "March",
        "April", "May", "June", "July", "August",
        "September", "October" "November", "December"],
    startdate = month[mm] + ", " + yyyy.toString();

종료 날짜는 var enddate = startdate - 30;분명히 작동하지 않습니다.

따라서 현재 날짜가 2011 년 12 월 30 일이면 시작 날짜를 2011 년 12 월 1 일로 지정하고 싶습니다.

편집 : 내 질문에 대한 답변이 ... 일종의. Date.today();그리고 Date.today().add(-30);일하지만 형식의 날짜가 필요합니다 January 13, 2012. 아닙니다 Fri Jan 13 2012 10:48:56 GMT -055 (EST). 도움이 필요하세요?

추가 편집 :이 글을 쓰는 현재 2018 년 입니다. Moment.js를 사용 하십시오 . 그게 제일이야.


stackoverflow.com/questions/563406/… 도움이 될 것 같습니다.
Tim Withers

답변:


149

우수한 Datejs JavaScript 날짜 라이브러리를 사용해보십시오 (원본은 더 이상 유지되지 않으므로 대신 이 적극적으로 유지되는 포크에 관심 있을 수 있습니다 ).

Date.today().add(-30).days(); // or...
Date.today().add({days:-30});

[편집하다]

우수한 Moment.js JavaScript 날짜 라이브러리 도 참조하십시오 .

moment().subtract(30, 'days'); // or...
moment().add(-30, 'days');

3
시간없이 UTC로 오늘 30 일 전후로 시작 및 종료 날짜를 가져 오기 위해 고군분투했습니다. 이 작업은 다음과 같습니다.moment( moment().subtract(30, 'days') ).format("YYYY-MM-DD")
Dylan Valade 2015 년

3
moment()접근 방식을 사용하고 toDate()JavaScript 날짜 개체를 다시 가져 오는 메서드를 추가했습니다 . 감사!
Brylie Christopher Oxley

4
이를 위해 왜 라이브러리를 사용해야합니까? 미친 것 같습니다.
해리

1
console.log 용 라이브러리를 추천 할 수 있습니까?
Andre Elrico

149

이 시도

var today = new Date()
var priorDate = new Date().setDate(today.getDate()-30)

@Neel에서 언급했듯이이 메서드는 Javascript Timestamp 형식으로 반환됩니다. 다시 날짜 개체로 변환하려면 위의 내용을 새 Date 개체에 전달해야합니다. new Date(priorDate).


14
외부 라이브러리를 사용하지 않고이 솔루션이 가장 좋습니다. 감사.
Gowiem 2014 년

16
이 메소드는 자바 스크립트 타임 스탬프 형식으로 반환됩니다. 날짜 개체로 다시 변환하려면 위의를 통과해야new Date(priorDate)

1
때로는 라이브러리없이 바닐라 js를 원합니다! 감사합니다 :)
Andrew McOlash

나는 setDate ()가 함수가 아니라는 것을 얻는다
chovy

1
@chovy가 오류가 발생한다고 상상할 수있는 유일한 방법 setDate()Date객체를 호출하지 않기 때문 입니다. 하지만 코드를 보지 않고 진단하는 것은 불가능합니다.
Rory McCrossan

86

다음은 추악한 해결책입니다.

var date = new Date(new Date().setDate(new Date().getDate() - 30));

24
놀랍게도 이것이 최상의 솔루션입니다.
Mark Rogers

8
동의 함-이것이 최상의 솔루션입니다. 이것은 Rory McCrossan의 대답에 대한 정확한 해결책이지만 간결하고 완벽합니다 (외부 라이브러리가 필요하지 않음).
Dan Nissenbaum

7
@MarkRogers "Hilariously"는 올바른 단어입니다. JavaScript 날짜는 정말 터무니 없습니다.
JosephStyons

예 이것은 간단하고 최상의 솔루션입니다.
Sachini Witharana

37
startDate = new Date(today.getTime() - 30*24*60*60*1000);

.getTime()메서드는 일반 수학 연산을 사용할 수있는 표준 JS 타임 스탬프 (970 년 1 월 1 일 이후의 밀리 초)를 반환하며,이를 Date 객체에 직접 피드백 할 수 있습니다.


8

오늘부터 30 일 후

let now = new Date()
console.log('Today: ' + now.toUTCString())
let next30days = new Date(now.setDate(now.getDate() + 30))
console.log('Next 30th day: ' + next30days.toUTCString())

오늘 지난 30 일 양식 받기

let now = new Date()
console.log('Today: ' + now.toUTCString())
let last30days = new Date(now.setDate(now.getDate() - 30))
console.log('Last 30th day: ' + last30days.toUTCString())


5

자바 스크립트는 외부 라이브러리없이 처리 할 수 ​​있습니다.

var today = new Date();
var dateLimit = new Date(new Date().setDate(today.getDate() - 30));

document.write(today + "<br/>" + dateLimit)


2

쉬운.(Using Vanilla JS)

let days=30;
this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000);

ISOFormat?

let days=30;
this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();


1

순간 js 를 선호합니다

startDate = moment().subtract(30, 'days').format('LL')  // January 29, 2015

endDate = moment().format('LL'); // February 28, 2015

0

이것은 ES6 버전입니다

let date = new Date()
let newDate = new Date(date.setDate(date.getDate()-30))
console.log(newDate.getMonth()+1 + '/' + newDate.getDate() + '/' + newDate.getFullYear() )

이 답변과 같은 다른 답변과 어떻게 다른 가요? 또한 ES5 ... 또는 ES3에서도 할 수 없었던 것은 없습니다.
Heretic Monkey

0

Node JS에서 moment를 사용하여 한 줄의 코드를 통해 간단하게 수행 할 수 있습니다. :)

    let lastOneMonthDate = moment().subtract(30,"days").utc().toISOString()

UTC 형식을 원하지 않음, EASIER : P

    let lastOneMonthDate = moment().subtract(30,"days").toISOString()

0

momentjs에 관심이 없다면 다음을 사용할 수 있습니다.

let x = new Date()

x.toISOString(x.setDate(x.getDate())).slice(0, 10)

기본적으로 현재 날짜 (당월 날짜의 숫자 값)를 가져 와서 값을 설정합니다. 그런 다음 순수한 숫자 날짜 (예 : 2019-09-23)를 잘라내는 ISO 형식으로 변환합니다.

누군가에게 도움이되기를 바랍니다.


0

let today = new Date()

let last30Days = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 30)

last30Days 날짜 개체에 있습니다.

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