วิธีที่ง่ายที่สุดในการรับอินสแตนซ์ของ Date ใหม่ () แต่ตั้งเวลาตอนเที่ยงคืนคืออะไร
วิธีที่ง่ายที่สุดในการรับอินสแตนซ์ของ Date ใหม่ () แต่ตั้งเวลาตอนเที่ยงคืนคืออะไร
คำตอบ:
setHoursวิธีสามารถใช้ตัวเลือกminutes, secondsและmsข้อโต้แย้งตัวอย่างเช่น:
var d = new Date();
d.setHours(0,0,0,0);
ที่จะตั้งเวลาในการ00:00:00.000ของเขตเวลาปัจจุบันของคุณถ้าคุณต้องการที่จะทำงานในเวลา UTC คุณสามารถใช้setUTCHoursวิธีการ
new Date(new Date().setHours(0,0,0,0))ทำงานอย่างสมบูรณ์แบบ:
แค่ต้องการชี้แจงว่าตัวอย่างข้อมูลจากคำตอบที่ยอมรับนั้นให้เวลาเที่ยงคืนที่ใกล้ที่สุดในอดีต :
var d = new Date();
d.setHours(0,0,0,0); // last midnight
หากคุณต้องการรับเที่ยงคืนที่ใกล้ที่สุดในอนาคตให้ใช้รหัสต่อไปนี้:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
ซับในสำหรับการกำหนดค่าวัตถุ:
new Date(new Date().setHours(0,0,0,0));
เมื่อสร้างองค์ประกอบ:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
เพิ่งจะเพิ่มที่นี่เพราะฉันมีที่ดินในหน้านี้มองหาวิธีการทำในmoment.jsและคนอื่น ๆ อาจทำเช่นกัน
[เหตุผล: คำว่า " โมฆะ " ปรากฏที่อื่นในหน้านี้แล้วดังนั้นเสิร์ชเอ็นจิ้นตรงนี้และmoment.jsจึงมานั้นแพร่หลายมากพอที่จะรับประกันว่าจะครอบคลุมถึงความถี่ที่กล่าวถึงในคำถาม SO ที่เกี่ยวเนื่องกับวันอื่น ๆ ]
ดังนั้นในเวอร์ชัน 2.0.0 ขึ้นไป:
date.startOf('day');
สำหรับรุ่นก่อนหน้า:
date.sod();
เอกสาร:
moment(DATE_OBJECT).startOf('day').toDate();
การเพิ่มความมีประโยชน์ให้กับตัวอย่างของ @ Dan ฉันต้องการค้นหาเที่ยงวันหรือเที่ยงคืนถัดไป
var d = new Date();
if(d.getHours() < 12) {
d.setHours(12,0,0,0); // next midnight/midday is midday
} else {
d.setHours(24,0,0,0); // next midnight/midday is midnight
}
สิ่งนี้ทำให้ฉันสามารถกำหนดความถี่สูงสุดสำหรับกิจกรรมได้เพียงอนุญาตให้เกิดขึ้นครั้งเดียวในตอนเช้าและอีกครั้งในช่วงบ่ายสำหรับผู้เยี่ยมชมไซต์ของฉัน วันที่ที่จับถูกใช้เพื่อตั้งค่าการหมดอายุของคุกกี้
หากคำนวณด้วยวันที่ฤดูร้อนมักจะทำให้ 1 uur มากกว่าหรือหนึ่งชั่วโมงน้อยกว่าเที่ยงคืน (CEST) สิ่งนี้ทำให้เกิดความแตกต่าง 1 วันเมื่อวันที่กลับมา ดังนั้นวันที่จะต้องไปรอบเที่ยงคืนที่ใกล้ที่สุด ดังนั้นรหัสจะเป็น (ths to jamisOn):
var d = new Date();
if(d.getHours() < 12) {
d.setHours(0,0,0,0); // previous midnight day
} else {
d.setHours(24,0,0,0); // next midnight day
}
ฉันได้สร้างต้นแบบสองสามตัวเพื่อจัดการเรื่องนี้ให้ฉัน
// This is a safety check to make sure the prototype is not already defined.
Function.prototype.method = function (name, func) {
if (!this.prototype[name]) {
this.prototype[name] = func;
return this;
}
};
Date.method('endOfDay', function () {
var date = new Date(this);
date.setHours(23, 59, 59, 999);
return date;
});
Date.method('startOfDay', function () {
var date = new Date(this);
date.setHours(0, 0, 0, 0);
return date;
});
หากคุณไม่ต้องการการตรวจสอบความปลอดภัยจากนั้นคุณสามารถใช้
Date.prototype.startOfDay = function(){
/*Method body here*/
};
ตัวอย่างการใช้งาน:
var date = new Date($.now()); // $.now() requires jQuery
console.log('startOfDay: ' + date.startOfDay());
console.log('endOfDay: ' + date.endOfDay());
ในกรณีที่คุณมีอยู่แล้วเป็น d3.js พึ่งพาในโครงการของคุณหรือไม่คิดนำมันในd3 เวลา ( ห้องสมุด d3.js เป็น modular ณ v4.0.0 ) ได้มีช่วงเวลาที่
อาจพิสูจน์ว่ามีประโยชน์เมื่อตั้งค่าวันที่เป็น "ค่าเริ่มต้น" เช่นเที่ยงคืน 0.00 วินาทีในช่วงเดือนแรกเป็นต้น
var d = new Date(); // Wed Aug 02 2017 15:01:07 GMT+0200 (CEST)
d3.timeHour(d) // Wed Aug 02 2017 00:00:00 GMT+0200 (CEST)
d3.timeMonth(d) // Tue Aug 01 2017 00:00:00 GMT+0200 (CEST)