Javascript에서 하루를 시작하고 끝내는 방법?


271

타임 스탬프 (GMT)에서 오늘의 시작 (00:00:00) 및 종료 (23:59:59)를 얻는 방법은 무엇입니까? 컴퓨터는 현지 시간을 사용합니다.

답변:


526
var start = new Date();
start.setHours(0,0,0,0);

var end = new Date();
end.setHours(23,59,59,999);

alert( start.toUTCString() + ':' + end.toUTCString() );

UTC 시간을 가져와야 할 경우을 사용할 수 있습니다 UTC().


24
var end = new Date(start.getTime());시작 시점과 종료 시점 사이의 날짜를 변경하는 경우 동일한 시점을 갖도록하는 것이 좋습니다. 시작하는 것이 좋습니다
Martyn Davis

@MartynDavis는 모두 정상 작동 일 때 일반적으로 약 0-2 틱이 사이에 발생하지만 CPU가 얼마나 바쁜 지에 따라 다르므로 1 틱 정밀도에 대해 걱정할 경우 그렇게하는 것이 좋습니다.
Jason Sebring

14
또한 표준시 setUTCHours대신에 setHours를 사용 하는 것이 좋습니다
sidonaldson

2
상황이 변경되었을 수 있지만 저에게는 시작이 전날 UTC 시작으로 설정되고 전날 UTC 종료로 설정됩니다.
David J

5
@sidonaldson의 매우 중요한 의견을 읽으십시오. setHoursUTC 시간 대신 현지 시간을 설정하므로 사용하는 것이 위험합니다.
Michael

229

momentjs 라이브러리를 사용하면 순간의 현재 날짜 객체 에서 startOf()and endOf()메소드를 사용하여 문자열 'day'을 인수로 전달할 수 있습니다 .

지역 GMT :

var start = moment().startOf('day'); // set to 12:00 am today
var end = moment().endOf('day'); // set to 23:59 pm today

UTC의 경우 :

var start = moment.utc().startOf('day'); 
var end = moment.utc().endOf('day'); 

22
momentjs는 JavaScript 시간 처리와 관련된 모든 것을위한 원 스톱 상점입니다. 항상 수입 할 가치가 있습니다.
Daniel F

8
그리고 우리는 .toDate()날짜를 얻기 위해 결국 사용해야 합니다. var end = moment().endOf('day').toDate();
YaTaras

5
추가 .unix()초 유닉스 타임 스탬프를 얻기 위해 말 : 같은 :moment().startOf('day').unix()
루카스 Liesis

5
미리 정의 된 Date 객체가 있으면 작동하지 않지만 작동하는 순간 js는 어떻게 든 작동 moment(new Date()).endOf("day");하지 않습니다 moment().endOf("day");.
B. Kemmer

5
@KlasMellbourn 지정된 시간대의 시작 시간을 얻으려면 다음을 사용 moment-timezone하고 수행 할 수 있습니다 moment().tz('America/Chicago').startOf('day').toDate()..
채드 존슨

8

은 Using luxon.js의 라이브러리를 동일한 파라미터로 '일'을 통과하여 startOf! 로베르토 및 방법을 사용하여 달성 될 수있다

var DateTime = luxon.DateTime;
DateTime.local().startOf('day').toUTC().toISO(); //2017-11-16T18:30:00.000Z
DateTime.local().endOf('day').toUTC().toISO(); //2017-11-17T18:29:59.999Z
DateTime.fromISO(new Date().toISOString()).startOf('day').toUTC().toISO(); //2017-11-16T18:30:00.000Z

현지 시간 만 필요한 경우 .toUTC () 제거

하지 왜 당신은 요청할 수 있습니다 moment.js가 , 대답이 여기에 해당합니다.


6

에서 MomentJs 우리는 그것을 같이 선언 할 수 있습니다 :

   const start = moment().format('YYYY-MM-DD 00:00:01');
   const end = moment().format('YYYY-MM-DD 23:59:59');

훨씬 더 도움이됩니다!
Darlan Dieterich

6

GMT의 타임 스탬프 관심이있는 경우 다른 간격 (시간 : 1000 * 60 * 60, 12 시간 : 1000 * 60 * 60 * 12등)에 맞게 편리하게 조정할 수 있습니다 .

const interval = 1000 * 60 * 60 * 24; // 24 hours in milliseconds

let startOfDay = Math.floor(Date.now() / interval) * interval;
let endOfDay = startOfDay + interval - 1; // 23:59:59:9999

1
중요한 경고 : UTC로 시간을 원할 때만 작동합니다. (이것은 질문이 요청한 것이지만 Google 검색에서 여기에 와서 이것을 깨닫지 못한 사람에게 경고해야한다고 생각합니다.)
Kip

4

참고 (Tvanfosson의 병합 버전)

함수를 호출 할 때 실제 날짜 => 날짜를 반환합니다.

export const today = {
  iso: {
    start: () => new Date(new Date().setHours(0, 0, 0, 0)).toISOString(),
    now: () => new Date().toISOString(),
    end: () => new Date(new Date().setHours(23, 59, 59, 999)).toISOString()
  },
  local: {
  start: () => new Date(new Date(new Date().setHours(0, 0, 0, 0)).toString().split('GMT')[0] + ' UTC').toISOString(),
  now: () => new Date(new Date().toString().split('GMT')[0] + ' UTC').toISOString(),
  end: () => new Date(new Date(new Date().setHours(23, 59, 59, 999)).toString().split('GMT')[0] + ' UTC').toISOString()
  }
}

// 사용하는 방법

today.local.now(); //"2018-09-07T01:48:48.000Z" BAKU +04:00
today.iso.now(); // "2018-09-06T21:49:00.304Z" * 

* 지역에 따라 현지 시간을 자동으로 변환하는 Java8의 Instant time 유형에 적용 가능합니다 (글로벌 앱 작성을 계획중인 경우).


0

날짜 조작에 date-fns 라이브러리 를 사용하는 것을 선호합니다 . 정말 훌륭한 모듈 식 및 일관된 도구입니다. 이 방법으로 하루의 시작과 끝을 얻을 수 있습니다.

var startOfDay = dateFns.startOfDay;
var endOfDay = dateFns.endOfDay;

console.log('start of day ==> ', startOfDay(new Date('2015-11-11')));
console.log('end of day ==> ', endOfDay(new Date('2015-11-11')));
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.29.0/date_fns.min.js"></script>


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