จะเริ่มต้นและสิ้นสุดใน Javascript ได้อย่างไร?


271

วิธีเริ่มต้น (00:00:00) และสิ้นสุด (23:59:59) ของวันนี้ในเวลาประทับ (GMT) คอมพิวเตอร์ใช้เวลาท้องถิ่น

คำตอบ:


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 เห็บเกิดขึ้นในระหว่าง แต่มันก็ขึ้นอยู่กับว่าซีพียูไม่ว่างดังนั้นมันจะทำให้รู้สึกว่าถ้าคุณกังวลเกี่ยวกับความถูกต้อง 1 เห็บ
Jason Sebring

14
ฉันขอแนะนำให้ใช้setUTCHoursแทนsetHoursรับ Universal time
sidonaldson

2
สิ่งต่าง ๆ อาจมีการเปลี่ยนแปลง แต่สำหรับฉันนี่เป็นการตั้งค่าเริ่มต้นเป็น UTC เริ่มต้นสำหรับวันก่อนหน้าและสิ้นสุด UTC สำหรับวันก่อนหน้า
David J

5
โปรดอ่านความคิดเห็นที่สำคัญอย่างยิ่งของ @ sidonaldson การใช้setHoursเป็นสิ่งที่อันตรายเนื่องจากกำหนดเวลาท้องถิ่นไม่ใช่ชั่วโมง UTC
Michael

229

การใช้ไลบรารีmomentjsสามารถทำได้ด้วยวิธีstartOf()และ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()ในตอนท้ายเพื่อรับ unix timestamp ในไม่กี่วินาที :) เช่นนี้:moment().startOf('day').unix()
Lukas Liesis

5
ขณะที่ js ไม่ทำงานหากฉันมีวัตถุวันที่ที่กำหนดไว้ล่วงหน้าเช่นmoment(new Date()).endOf("day");ไม่ทำงาน แต่moment().endOf("day");ทำงานได้
B. Kemmer

5
@KlasMellbourn ที่จะได้รับการเริ่มต้นของวันสำหรับเขตที่ระบุคุณสามารถใช้และทำเช่นนี้:moment-timezone moment().tz('America/Chicago').startOf('day').toDate()
ชาดจอห์นสัน

8

การใช้ห้องสมุดluxon.jsสามารถทำได้เหมือนกันโดยใช้วิธีการ startOf และ endOf โดยส่งผ่าน 'วัน' เป็นพารามิเตอร์

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

หากคุณสนใจเวลาประทับใน 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 และไม่ได้ตระหนักถึงนี้.)
กีบ

4

FYI (เวอร์ชันรวมของ 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 ซึ่งแปลงเวลาท้องถิ่นของคุณโดยอัตโนมัติขึ้นอยู่กับภูมิภาคของคุณ (หากคุณวางแผนที่จะเขียนแอพทั่วโลก)


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.