Это не ошибка дизайна . Любой, кто совершает это, делает что-то неправильно.
Есть три случая, когда я вижу, где вы можете столкнуться с этой проблемой:
cache={}
, и вы не должны были бы вызывать функцию с фактическим аргументом вообще. Пример в вопросе может относиться к категории 1 или 3. Нечетно, что он изменяет переданный список и возвращает его; вы должны выбрать тот или другой.
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()
.
Если вас интересуют только временные метки, вы также можете сделать это, что удобно адаптировать для разных интервалов (час: 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
Используя библиотеку 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
var start = moment.utc().startOf('day');
var end = moment.utc().endOf('day');
.toDate()
в конце, чтобы получить дату. var end = moment().endOf('day').toDate();
– YaTaras
28 November 2016 в 11:48
.unix()
в конец, чтобы получить временную метку unix в секундах :) вот так: moment().startOf('day').unix()
– Lukas
13 July 2017 в 18:58
moment(new Date()).endOf("day");
не работает, но moment().endOf("day");
работает.
– B. Kemmer
19 September 2017 в 05:56
moment-timezone
и сделать это: moment().tz('America/Chicago').startOf('day').toDate()
.
– Chad Johnson
7 March 2018 в 00:41
function getTime(zone, success) {
var url = 'http://json-time.appspot.com/time.json?tz=' + zone,
ud = 'json' + (+new Date());
window[ud]= function(o){
success && success(new Date(o.datetime));
};
document.getElementsByTagName('head')[0].appendChild((function(){
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = url + '&callback=' + ud;
return s;
})());
}
getTime('GMT', function(time){
// This is where you do whatever you want with the time:
alert(time);
});
Я предпочитаю использовать библиотеку 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>
Используя библиотеку 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
remove .toUTC (), если вам нужно только локальное время
, и вы можете спросить, почему не moment.js , для этого здесь здесь .
var end = new Date(start.getTime());
убедиться, что у вас есть тот же момент времени - в случае, если вы меняете даты между начальной и конечной инициализацией - это может произойти - просто хорошая привычка – Martyn Davis 31 January 2017 в 04:07setUTCHours
вместоsetHours
, чтобы получить универсальное время – sidonaldson 12 June 2017 в 11:39