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.