programing

JavaScript에서 어제 날짜 계산

randomtip 2023. 1. 5. 23:53
반응형

JavaScript에서 어제 날짜 계산

JavaScript에서 어제를 날짜로 계산하려면 어떻게 해야 하나요?

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)

[edit sept 2020] : 이전 답변을 담은 토막과 화살표 기능 추가

[2022년 4월]:이 슬라이드는 다음 슬라이드에 있는Date프로토타입(글로벌네임스페이스를 오염시키지 않음)

// a (not very efficient) oneliner
let yesterday = new Date(new Date().setDate(new Date().getDate()-1));
console.log(`Yesterday (oneliner)\n${yesterday}`);

// a function call
yesterday = ( function(){this.setDate(this.getDate()-1); return this} )
            .call(new Date);
console.log(`Yesterday (function call)\n${yesterday}`);

// an iife (immediately invoked function expression)
yesterday = function(d){ d.setDate(d.getDate()-1); return d}(new Date);
console.log(`Yesterday (iife)\n${yesterday}`);

// oneliner using es6 arrow function
yesterday = ( d => new Date(d.setDate(d.getDate()-1)) )(new Date);
console.log(`Yesterday (es6 arrow iife)\n${yesterday}`);

// use a method
const getYesterday = (dateOnly = false) => {
  let d = new Date();
  d.setDate(d.getDate() - 1);
  return dateOnly ? new Date(d).toDateString() : d;
};
console.log(`Yesterday (method)\n${getYesterday()}`);
console.log(`Yesterday (method dateOnly=true)\n${getYesterday(true)}`);

// use Date.now
console.log(`Yesterday, using Date.now\n${new Date(Date.now() - 864e5)}`);
.as-console-wrapper {
    max-height: 100% !important;
}

가장 쉬운 크로스 브라우저 솔루션에 대한 답변이 의외로 없다

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

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

*: 캘린더의 이상함(서머타임제 등)에 대한 정확성이 저하되지 않을 경우 이 방법은 잘 작동합니다.그렇지 않을 경우 https://moment.github.io/luxon/을 사용하는 것이 좋습니다.

이거 드셔보세요

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

질문을 일반화하고 다른 계산을 수행하려면 다음을 사용합니다.

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

이를 통해 "now" 값을 밀리초 단위로 unix epoch를 나타내는 정수로 하여 하루를 뺀 새로운 날짜 객체가 생성됩니다.

이틀 전:

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

1시간 전:

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

나는 모멘트 라이브러리를 이용하는데, 그것은 매우 유연하고 사용하기 쉽다.

고객님의 경우:

let yesterday = moment().subtract(1, 'day').toDate();
new Date(new Date().setDate(new Date().getDate()-1))
//Create a date object using the current time
var now = new Date();

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

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

이것은 정확한 분 단위로 어제 00:00에 생산될 것입니다.

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

효과가 있을 것이다

다음은 YYY-MM-DD 형식의 yesterdays 날짜를 텍스트로 가져와 시간대 오프셋을 처리하기 위해 사용되는 라이너입니다.

new Date(Date.now() - 1 * 864e5 - new Date(Date.now() - 1 * 864e5).getTimezoneOffset() * 6e4).toISOString().split('T')[0]

원래대로 x일 전으로 돌아오는 날짜로 변경될 수 있습니다.시간 등을 포함하다

console.log(Date())
console.log(new Date(Date.now() - 1 * 864e5 - new Date(Date.now() - 1 * 864e5).getTimezoneOffset() * 6e4).toISOString().split('T')[0]); // "2019-11-11"
console.log(new Date(Date.now() - 1 * 864e5 - new Date(Date.now() - 1 * 864e5).getTimezoneOffset() * 6e4).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

한 번 해봐, 나한테는 효과가 있어.

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

이것으로 어제 날짜 오브젝트가 반환되었습니다.

어제 날짜를 가져오고 날짜를 사람이 읽을 수 있는 형식으로 포맷하려면 사용자 정의 작성을 고려하십시오.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));

( 바이올린도 참조)

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

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

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

"Date.now() - 86400000"은 서머타임 종료일(그날 25시간)에 작동하지 않습니다.

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

var d = new goog.date.Date();
d.add(new goog.date.Interval(0, 0, -1));

경계 날짜 문제 해결 (2019, 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);

2위 파비아노와 다른 사람들은 이미 비슷한 대답을 공유했지만, 이것을 실행하면 더 분명해 보일 것이다.

86400000 = 하루에 밀리초

const event = new Date();
console.log(new Date(Date.parse(event) - 86400000))
console.log(event)

언급URL : https://stackoverflow.com/questions/5511323/calculate-the-date-yesterday-in-javascript

반응형