Yanıtlar:
setHours
Yöntem isteğe bağlı sunar minutes
, seconds
ve ms
örneğin, bağımsız değişkenler:
var d = new Date();
d.setHours(0,0,0,0);
Yani zamanı ayarlayacaktır 00:00:00.000
arasında geçerli saat dilimine Eğer UTC süreyi çalışmaya isterseniz kullanabilirsiniz, setUTCHours
yöntem.
new Date(new Date().setHours(0,0,0,0))
.
Sadece kabul edilen cevaptan snippet'in geçmişteki en yakın gece yarısını verdiğini açıklığa kavuşturmak istedim :
var d = new Date();
d.setHours(0,0,0,0); // last midnight
Gelecekte en yakın gece yarısını almak istiyorsanız aşağıdaki kodu kullanın:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
Nesne yapılandırmaları için bir astar:
new Date(new Date().setHours(0,0,0,0));
Bir öğe oluştururken:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
Bunu buraya ekleyeceğim çünkü moment.js'de bunu nasıl yapacağımı arayan bu sayfaya indim ve diğerleri de yapabilir.
[Gerekçe: "moment" kelimesi zaten bu sayfada başka bir yerde görünüyor, bu yüzden arama motorları doğrudan buraya ve moment.js diğer tarihle ilgili SO sorularında ne sıklıkta bahsedildiğini garanti altına almak için yeterince geniş.
Yani, sürüm 2.0.0 ve üstü:
date.startOf('day');
Önceki sürümler için:
date.sod();
Dokümanlar:
moment(DATE_OBJECT).startOf('day').toDate();
Muhtemelen kullanabilirsiniz
new Date().setUTCHours(0,0,0,0)
değere sadece bir kez ihtiyacınız varsa.
@ Dan'ın örneğine yararlılık ekleyerek, bir sonraki gece yarısı veya gece yarısı bulmam gerekiyordu.
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
}
Bu, bir etkinlik için sıklık sınırı belirlememe izin verdi, bu da siteme gelen herhangi bir ziyaretçi için yalnızca sabahları ve öğleden sonra bir kez gerçekleşmesine izin verdi. Yakalanan tarih, çerezin sona ermesini ayarlamak için kullanıldı.
Tarihler yaz ile hesaplanıyorsa genellikle gece yarısından (CEST) 1 uur veya bir saat daha az neden olur. Bu, tarihler döndüğünde 1 gün farkına neden olur. Bu yüzden tarihler en yakın gece yarısına yuvarlanmalıdır. Kod şu şekilde olacaktır (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
}
Bunu benim için halletmek için birkaç prototip yaptım.
// 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;
});
emniyet kontrolünü istemiyorsanız, sadece
Date.prototype.startOfDay = function(){
/*Method body here*/
};
Örnek kullanım:
var date = new Date($.now()); // $.now() requires jQuery
console.log('startOfDay: ' + date.startOfDay());
console.log('endOfDay: ' + date.endOfDay());
Projenizde zaten bir bağımlılık olarak d3.js'niz varsa veya onu getirmeyi düşünmüyorsanız, d3-time ( d3.js kütüphanesi v4.0.0'dan itibaren modülerdir ) Aralıkları vardır .
Tarihleri "varsayılan" değerlere ayarlarken faydalı olabilir, örn. Gece yarısı, 0,00 saniye, ayın ilk günü, vb.
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)