2013-06-03 2 views
0

Я написал код для динамически созданного графа и использует Date.UTC() для создания отформатированных дат.Date.UTC создает неправильные даты

Работает полностью в течение нескольких месяцев, однако у меня возникают проблемы с переходом через месяцы, т.е. с февраля по март создает 29, 30 и 31 февраля, и теперь я обнаружил ошибку, которая составляет 31 мая 1 июня ... ....

Я попытался найти ответ, но пока не повезло. Есть ли простое исправление, которое я просматриваю или есть исправление?

s.Set('chart.xmin', Date.UTC(<?php echo $startyear.",".$startmonth.",".$startday.",".$starthour.",".$startminute; ?>));    
    s.Set('chart.xmax', Date.UTC(<?php echo $finishyear.",".$finishmonth.",".$finishday.",".$finishhour.",".$finishminute; ?>)); 

Приветствия

Джеймс

+0

Возможно, вы ожидаете неправильного вывода; 'Date.UTC' предоставляет _Integer_ в _ms_ с момента unix, а не экземпляр _Date_. Возможно, ваша функция ожидает 'new Date (Date.UTC (y, m, d, h, min, s))' –

+0

Спасибо, Пол. Date.UTC формируется позже в скрипте. Все работает в течение месяца, как между 5 и 20 мая, проблема начинается, когда мы пересекаем месяцы, и создаются недействительные или неправильные даты. – Jimbob

ответ

0

JavaScript месяцы 0-11, в то время как РНР являются 1-12. Поэтому, когда вы создаете код JavaScript на странице PHP, вам нужно вычесть 1 из месяца.

Но разве было бы проще просто пропустить временную метку? Например:

new Date(<?php echo date_timestamp_get($yourdate) * 1000 ?>) 

* 1000 есть, потому что метка времени РНР в секундах и JavaScript находится в миллисекундах. Но они оба используют одну и ту же ссылочную дату - эпоху 1/1/1970 UTC.

Ссылка PHP date_timestamp_getdocs here.

+0

Спасибо Мэтт. Я сделал это, и все это работает, если диапазон остается в течение месяца. Когда диапазон пересекает месяц, я получаю проблему. Это составляет 31 мая 1 июня и добавляет 29-го и 31-го февраля все недопустимые даты – Jimbob

+0

Действительно? Вы нигде не показываете '-1'. в коде. Кроме того, зачем вам передавать его в виде отдельных значений? Разве не было бы намного проще пропустить одну целую временную метку? –

Смежные вопросы