Date из timestamp определяется неправильно
Привык к разной магии в javascript, но это уже за гранью добра и зла. Проблема в следующем - пишу что-то вроде расписания, в цикле создаются timestamp с интервалом, и распихиваются в объект в виде [дата][timestamp]. Все идет хорошо, но когда время в timestamp переходит через 22.59, дата у него почему-то определяется как следующий день. Можно конечно сделать костыль и не постить здесь вопросы, но мне интересно, почему оно именно так работает)
Вот кусок кода, который заполняет объект timestamp'aми: var days = {}; var current_date = new Date(RecordInEvent.current_time * 1000); //RecordInEvent.current_time - timestamp php текущего времени на сервере var start_time = Math.floor(new Date(current_date.getFullYear(), current_date.getMonth(), current_date.getDate(), 0, 0, 0, 0).getTime() / 1000); //стартовое время - 00.00 текущего дня for (var i = start_time; i < start_time + RecordInEvent.time_to_show; i += RecordInEvent.record_interval) { var date = new Date(i * 1000); if (!days[date.toLocaleDateString()]) { days[date.toLocaleDateString()] = {}; } days[date.toLocaleDateString()][date.toTimeString()] = (RecordInEvent.recorded_time[i] || i < RecordInEvent.current_time + RecordInEvent.record_delay) ? false : true; } P.S. timestamp нужен для связки js + php + MySQL, к нему привязываются данные в базе. Если возможен другой подход, более правильный, с удовольствием выслушаю) Для наглядности сделал скрин объекта, в котором находятся данные ![]() |
Если уж юзаете date.toLocaleDateString то и date.toLocaleTimeString юзайте. Но вообще toLocale от браузера к браузеру бажные, лучше вручную дату составлять.
|
Такое решение и правда работает) Спасибо. И кажется, я понял теперь, в чем вся соль была. Из-за разницы временных поясов время отображалось неправильно, timestamp привязан к какому-то конкретному временному поясу, а toLocale берет настройки из браузера. Я во время тестов во время вывода времени не использовал toLocale, тогда как дата этому времени была присвоена с использованием toLocale, поэтому и возникала разница в час.
|
Часовой пояс GMT +3, время: 12:42. |