JavaScript로 어제 날짜 계산


답변:


458
var date = new Date();

date ; //# => Fri Apr 01 2011 11:14:50 GMT+0200 (CEST)

date.setDate(date.getDate() - 1);

date ; //# => Thu Mar 31 2011 11:14:50 GMT+0200 (CEST)

12
좋은. 언뜻보기에 이것은 getDate달의 날짜 를 반환하면 실패 하지만 (예 : 1-31) 실제로 setDate(0)날짜를 이전 달의 마지막 날로 설정합니다. 그래도 모든 브라우저에서 작동합니까?
Drew Noakes

1
"모든"브라우저를 확인할 수는 없지만 camo.githubusercontent.com/을
James Kyburz

1
@Zargold 무슨 말인지 이해하지 못합니다. node --version v9.4.0 node const date = new Date () undefined> date.toISOString () '2018-02-10T16 : 26 : 30.821Z'> date.setDate (date.getDate ()-1) 1518193590821> 날짜 '30.821Z : 26 2018-02-09T16'() .toISOString
제임스 Kyburz

그렇습니다. 방금 직접 테스트 해 보았습니다. 내 유스 케이스가 어떻게 다른지 확실하지 않으므로 완전히 리팩토링했습니다. 그래서 볼 수 없습니다.
Zargold

91

매우 효율적이지 않지만 oneliner로 :

var yesterday = new Date(new Date().setDate(new Date().getDate()-1));

위의 세 가지 Date객체는 불필요하게 낭비입니다. 다음을 사용하여 단일 인스턴스화로 줄일 수 있습니다.

var yesterday = (function(){this.setDate(this.getDate()-1); return this})
                  .call(new Date)

또는 원하는 경우 :

var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)

또는 화살표 기능이있는 ES6을 선호하는 경우 :

let yesterday = ( d => new Date(d.setDate(d.getDate()-1)) )(new Date);

6
나는 범위를 어지럽히 지 않기를 원합니다.var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)
Roy Tinker

4
하나의 라이너가 필요한 경우 new Date (Date.now ()-24 * 60 * 60 * 1000); 이것은 하나의 Date 객체 만 만드는 이점이 있습니다. 그러나 솔직히이 코드를 유지하는 사람은 기능을 던지는 것 (또는 그 문제에 대해 밀리 초)보다 명확한 2 줄 버전을 보는 것이 훨씬 더 행복 할 것입니다.
Rob Whelan


60

놀랍게도 가장 쉬운 크로스 브라우저 솔루션에 대한 답은 없습니다

어제 정확히 같은 시간을 찾으려면 :

var yesterday = new Date(Date.now() - 86400000); // that is: 24 * 60 * 60 * 1000

그것은 당신이 의존성을 자유롭게하고 싶다면 그렇지 않으면 http://momentjs.com을 사용하는 것이 좋습니다


7
일광 절약 시간제 변경시 어떻게 작동합니까? 그게 앞뒤로 한 시간 뒤에 충돌하지 않습니까?
Adam Tegen

19

질문을 일반화하고 다른 diff 계산을 사용하려면 다음을 사용하십시오.

var yesterday = new Date((new Date()).valueOf() - 1000*60*60*24);

이렇게하면 "지금"의 값을 기준으로 새 날짜 개체가 생성됩니다. 정수는 하루를 빼고 밀리 초 단위로 유닉스 시대를 나타냅니다.

이틀 전:

var twoDaysAgo = new Date((new Date()).valueOf() - 1000*60*60*24*2);

한 시간 전에:

var oneHourAgo = new Date((new Date()).valueOf() - 1000*60*60);

우리가 밀리 초 단위로 표현 된 유닉스 시대를 운영 할 때 가장 안전한 방법 인 것 같습니다. 따라서 산술은 getDate ()-1과 같은 것을 수행하는 것보다 안전합니다. getDate ()-1을 시도하지 않았지만 getDate ()의 문서를 기반으로 오늘 날짜가 매월 1 일이면 1을 반환합니다. 1-1 = 0은 유효한 날짜가 아닙니다. setDate (0) 작동 방식을 잘 모르겠습니다.
Kapil Pendse 2016 년

1
이것은 내 접근 방식이지만 조금 단순화 할 수도 있지만 new Date (Date.now ()-24 * 60 * 60 * 1000);
Rob Whelan

setDate (0), btw는 괜찮을 것입니다. 지난 달의 마지막 날로 넘어갑니다. 그러나 여기에서 밀리 초 표현을하는 것이 더 깔끔하고 직관적 인 것처럼 보입니다. 한 가지 단점은 "하루에 밀리 초 수"가 명확하지 않기 때문에 해당 계산을 잘못 입력하는 것이 쉽다는 것입니다.
Rob Whelan

유닉스 시간으로 작업하는 것이 더 안정적인 옵션처럼 보입니다. 이 등급이 더 높아야합니다.
Paul

예,이 방법이 가장 좋습니다. 모호성이 적습니다. 나는 결국에 갔다 new Date(Date.parse(new Date()) - 86400000). Date.now ()를 좋아하지만 대신 시도해 볼 것입니다. 추가 날짜를 저장합니다.
coblr

9

나는 순간 라이브러리를 사용하는데 매우 유연하고 사용하기 쉽다.

귀하의 경우 :

let yesterday = moment().subtract(1, 'day').toDate();

2
당신은 더 나은 사용하는 것 subtract대신에add
토마스 아 유브

잘 작동합니다! FullCalendar와 그의 validRange
XenoX의


7
//Create a date object using the current time
var now = new Date();

//Subtract one day from it
now.setDate(now.getDate()-1);

6

var today = new Date();
var yesterday1 = new Date(new Date().setDate(new Date().getDate() - 1));
var yesterday2 = new Date(Date.now() - 86400000);
var yesterday3 = new Date(Date.now() - 1000*60*60*24);
var yesterday4 = new Date((new Date()).valueOf() - 1000*60*60*24);
console.log("Today: "+today);
console.log("Yesterday: "+yesterday1);
console.log("Yesterday: "+yesterday2);
console.log("Yesterday: "+yesterday3);
console.log("Yesterday: "+yesterday4);


5

이것은 분 정밀도로 어제 00:00에 생성됩니다.

var d = new Date();
d.setDate(d.getDate() - 1);
d.setTime(d.getTime()-d.getHours()*3600*1000-d.getMinutes()*60*1000);

2
d.setHours(0,0,0,0);

트릭을 할 것입니다


1
그럴까요? 나는 이것이 당신의 시간, 분 및 초를 0으로 설정한다고 생각했지만 실제로 날짜를 변경하지는 않습니까?
Jesper Bylund

어제 도착하려면 음수를 사용해야했습니다 d.setHours(-1,0,0,0). 이것은 어제 날짜를 반환하지만 원하는 시간이 아닐 수도 있습니다 (23:00:00)
cs_pupil

1

이것을 시도하고 나를 위해 일하십시오 :

var today = new Date();
var yesterday = new Date(today.setDate(today.getDate() - 1)); `

이것은 어제 날짜 개체를 다시 얻었습니다.


1
today.setDate를 사용하고 있으므로 오늘도 어제로 변경됩니다. 어제 변수를 만든 다음 설정하는 것이 좋습니다. var yesterday = new Date(); yesterday.setDate(today.GetDate() - 1)오늘과 어제 모두 사용 가능
PersyJack

1

다음은 텍스트로 YYYY-MM-DD 형식의 어제 날짜를 가져오고 시간대 오프셋을 처리하는 데 사용되는 하나의 라이너입니다.

new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]

x 일 전의 날짜를 반환하도록 명백하게 변경 될 수 있습니다. 시간 등을 포함하려면

console.log(Date())
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]); // "2019-11-11"
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('.')[0].replace('T',' ')); // "2019-11-11 11:11:11"

// that is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000    // this is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000


0

어제 날짜와 날짜를 사람이 읽을 수있는 형식으로 지정하려면 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. Subtract 1 day
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -1));

( 이 바이올린 참조 )


0

momentjs를 사용할 수 있습니다.이 라이브러리로 많은 것을 얻을 수 있습니다.

현재 타이밍으로 어제 날짜 가져 오기 moment().subtract(1, 'days').toString()

시작 날짜로 어제 날짜 가져 오기 moment().subtract(1, 'days').startOf('day').toString()


0

경계 날짜 문제 해결 (2020, 01, 01)-> 2019, 12, 31

var now = new Date();
return new Date(now.getMonth() - 1 === 0 ? now.getFullYear() - 1 : now.getFullYear(),
                now.getDate() - 1 === 0 ? now.getMonth() - 1: now.getMonth(),
                now.getDate() - 1);

-1

"Date.now ()-86400000"은 일광 절약 시간 종료일 (당일 25 시간)에 작동하지 않습니다.

또 다른 옵션은 폐쇄를 사용하는 것입니다.

var d = new goog.date.Date();
d.add(new goog.date.Interval(0, 0, -1));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.