Jawaban:
The setHours
Metode dapat mengambil opsional minutes
, seconds
dan ms
argumen, misalnya:
var d = new Date();
d.setHours(0,0,0,0);
Yang akan mengatur waktu untuk 00:00:00.000
dari zona waktu Anda saat ini , jika Anda ingin bekerja di waktu UTC, Anda dapat menggunakan setUTCHours
metode.
new Date(new Date().setHours(0,0,0,0))
.
Hanya ingin mengklarifikasi bahwa cuplikan dari jawaban yang diterima memberikan waktu tengah malam terdekat :
var d = new Date();
d.setHours(0,0,0,0); // last midnight
Jika Anda ingin mendapatkan tengah malam terdekat di masa mendatang , gunakan kode berikut:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
Satu-liner untuk konfigurasi objek:
new Date(new Date().setHours(0,0,0,0));
Saat membuat elemen:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
Hanya akan menambahkan ini di sini karena saya mendarat di halaman ini mencari cara untuk melakukan hal ini di moment.js dan lain-lain dapat melakukan terlalu.
[Dasar Pemikiran: kata "saat" sudah muncul di tempat lain di halaman ini sehingga mesin telusur langsung ke sini, dan moment.js cukup luas untuk menjamin akan dibahas tentang seberapa sering disebutkan dalam pertanyaan SO terkait tanggal lainnya]
Jadi, dalam versi 2.0.0 dan lebih tinggi:
date.startOf('day');
Untuk versi sebelumnya:
date.sod();
Docs:
moment(DATE_OBJECT).startOf('day').toDate();
Anda mungkin bisa menggunakan
new Date().setUTCHours(0,0,0,0)
jika Anda membutuhkan nilai hanya sekali.
Menambahkan kegunaan pada contoh Dan, saya harus menemukan tengah hari atau tengah malam berikutnya.
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
}
Ini memungkinkan saya untuk menetapkan batas frekuensi untuk suatu acara, hanya memungkinkannya terjadi sekali di pagi hari dan sekali di sore hari untuk setiap pengunjung ke situs saya. Tanggal yang diambil digunakan untuk mengatur kedaluwarsa cookie.
Jika menghitung dengan tanggal, musim panas akan menyebabkan sering 1 jam lebih atau satu jam kurang dari tengah malam (CEST). Ini menyebabkan perbedaan 1 hari ketika tanggal kembali. Jadi kurma harus membulatkan ke tengah malam terdekat. Jadi kodenya adalah (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
}
Saya telah membuat beberapa prototipe untuk menangani ini untuk saya.
// 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;
});
jika Anda tidak ingin memeriksa keselamatan, maka Anda bisa menggunakannya
Date.prototype.startOfDay = function(){
/*Method body here*/
};
Contoh penggunaan:
var date = new Date($.now()); // $.now() requires jQuery
console.log('startOfDay: ' + date.startOfDay());
console.log('endOfDay: ' + date.endOfDay());
Jika Anda sudah memiliki d3.js sebagai dependensi dalam proyek Anda, atau tidak keberatan membawanya, d3-time ( pustaka d3.js modular pada v4.0.0 ) telah mendapat Interval .
Mereka mungkin terbukti berguna ketika menetapkan tanggal ke nilai "default", misalnya tengah malam, 0,00 detik, yang pertama bulan, dll.
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)