Каков наилучший способ инициализации даты JavaScript до полуночи?

Каков самый простой способ получить экземпляр новой даты(), но установить время в полночь?

Ответ 1

Метод setHours может принимать необязательные minutes, seconds и аргументы ms, например:

var d = new Date();
d.setHours(0,0,0,0);

Это установит время до 00:00:00.000 вашего текущего часового пояса, если вы хотите работать в UTC, вы можете использовать метод setUTCHours.

Ответ 2

Просто хотел уточнить, что фрагмент из принятого ответа дает ближайшую полночь в прошлом:

var d = new Date();
d.setHours(0,0,0,0); // last midnight

Если вы хотите получить ближайшую полночь в будущем, используйте следующий код:

var d = new Date();
d.setHours(24,0,0,0); // next midnight

Ответ 3

Однострочный шрифт для конфигураций объектов:

new Date(new Date().setHours(0,0,0,0));

При создании элемента:

dateFieldConfig = {
      name: "mydate",
      value: new Date(new Date().setHours(0, 0, 0, 0)),
}

Ответ 4

Просто добавлю это сюда, потому что я приземлился на этой странице, ища, как это сделать в moment.js, и другие могут сделать тоже.

[Обоснование: слово "момент" уже появляется в другом месте на этой странице, поэтому поисковые системы прямо здесь, а moment.js достаточно распространены, чтобы гарантировать, что вас будут закрывать о том, как часто это упоминается в других вопросах SO, связанных с датой]

Итак, в версии 2.0.0 и выше:

date.startOf('day');

Для более ранних версий:

date.sod();

Docs:

http://momentjs.com/docs/#/manipulating/start-of/

Ответ 5

Возможно, вы можете использовать

new Date().setUTCHours(0,0,0,0)

если вам нужно значение только один раз.

Ответ 6

Добавление полезности к примеру @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
}

Это позволило мне установить ограничение частоты для события, только чтобы это произошло один раз утром и один раз днем ​​для любого посетителя моего сайта. Удержанная дата была использована для установки истечения срока действия файла cookie.

Ответ 7

Если подсчет с датами в летнее время будет чаще всего на 1 грн больше или на час меньше, чем в полночь (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
    }

Ответ 8

Если у вас уже есть d3.js как зависимость в вашем проекте или не против его ввода, d3-time (библиотека d3.js является модульной с версии 4.0.0) получила Intervals.

Они могут оказаться полезными при настройке дат на значения по умолчанию, например. полночь, 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)

Ответ 9

Я сделал пару прототипов, чтобы справиться с этим для меня.

// 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;
});

если вам не нужна проверка saftey, то вы можете просто использовать

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());

Ответ 10

                    var a = new Array();
					var b = new Array();
					var c = new Array();
					var date = new Date().toJSON();
					a = date.split("T");
					a = a[0];
					b = a.split("-");
					var currentDate = new Date(b[0],b[1] , b[2] -29 ,-19,30,0).toJSON();
					c = currentDate.split(".");
					var newDate = c[0];
console.log(newDate);