Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Date из timestamp определяется неправильно (https://javascript.ru/forum/misc/55551-date-iz-timestamp-opredelyaetsya-nepravilno.html)

WishMaster 04.05.2015 10:25

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, к нему привязываются данные в базе. Если возможен другой подход, более правильный, с удовольствием выслушаю)
Для наглядности сделал скрин объекта, в котором находятся данные

Aetae 04.05.2015 10:51

Если уж юзаете date.toLocaleDateString то и date.toLocaleTimeString юзайте. Но вообще toLocale от браузера к браузеру бажные, лучше вручную дату составлять.

WishMaster 04.05.2015 11:09

Такое решение и правда работает) Спасибо. И кажется, я понял теперь, в чем вся соль была. Из-за разницы временных поясов время отображалось неправильно, timestamp привязан к какому-то конкретному временному поясу, а toLocale берет настройки из браузера. Я во время тестов во время вывода времени не использовал toLocale, тогда как дата этому времени была присвоена с использованием toLocale, поэтому и возникала разница в час.


Часовой пояс GMT +3, время: 12:42.