Сбой временной метки JavaScript для PHP, добавляет около полутора месяцев к времени


Хорошо, я пытаюсь преобразовать временную метку javascript в эквивалент php, я просматривал сообщения здесь, в стеке, для получения достойного ответа, а также на различных других сайтах, поэтому этот вопрос является последней попыткой, несмотря на то, что я знаю, что я, скорее всего, получу голоса, и кто-то говорит мне, что это не более чем вопрос-обман откуда-то еще. Так что, несмотря на это..

Это моя неудачная попытка до сих пор. Пожалуйста, обратите внимание, что я использую jQuery, с noConflict, следовательно, j, а не тот $

var yr = j('#time_year :selected').val();//year
var mn = j('#time_month :selected').val();//month
var dy = j('#time_day :selected').val();//day
var hr = j('#time_hour :selected').val();//hour
var min = j('#time_minute :selected').val();//minute
var sc = j('#time_second :selected').val();//second

if(j('#time_ampm :selected').val() == 12 && j('#time_hour :selected').val() < 12){hr = j('#time_hour :selected').val()+12;}
if(j('#time_ampm :selected').val() == 0 && j('#time_hour :selected').val() == 12){hr = 0;}

var theDate = new Date(yr, mn, dy, hr, min, sc).getTime();
setTimeStamps(theDate);
j('#timestamp_now_js').html(" "+theTime);
j('#timestamp_now_php').html(" "+Math.round(theTime / 1000));

Выбранные значения вверху основаны на Mozilla.org Ссылка на дату с использованием 0-nn, как они описывают. Где в качестве am/pm if-else, по сути, предназначено для добавления 12 часов к выбранному времени, поскольку время, отображаемое на сайте, имеет 12-часовой формат. Javascript использует 24-часовой режим. Он также присутствует в том случае, если выбран am и используется 12, он преобразует 12 в 0, чтобы соответствовать концепции 24-часового форматирования.

В настоящее время, похоже, происходит следующее несмотря на то, что это, кажется, работает, когда я запускаю временную метку, заданную с помощью функции php date(), она показывает дату, которая составляет около месяца, 2 недели и несколько дней, что соответствует тому, что я тестирую, что эквивалентно сейчас

Я бы создал jsFiddle всего включенного html, но я использую php для создания своих полей выбора. Так что с этим, если вы хотите посмотреть, что у меня есть "вживую", тогда перейдите к http://7pz.net/timestamps.php поскольку именно здесь я тестирую концепцию.

Author: chris, 2012-09-02

1 answers

Это потому, что в объектах Javascript Date диапазон месяцев равен 0-11, а не 1-12. Это для части "месяц". Попробуйте это:

var mn = j('#time_month :selected').val() - 1; //month

Или лучше, сгенерируйте <option>s со значениями в диапазоне от 0 до 11.

Плюс, это утверждение:

hr = j('#time_hour :selected').val()+12;

Помните, что j('#time_hour :selected').val() - это строка , а не число, поэтому вам нужно преобразовать ее перед добавлением 12, иначе вы получите что-то вроде "0412". Вы создаете дату с количеством часов, равным 412, то есть 17 дней и 4 часа. И 17 дни добавляются к количеству дней.

Исправьте это следующим образом:

hr = +j('#time_hour :selected').val() + 12;

Я использовал плюс унарный оператор.

(P.S.: есть много возможностей для улучшения вашего кода, начиная с удобочитаемости и кэширования объектов jQuery. Потратьте некоторое время на совершенствование своих навыков программирования на Javascript, прежде чем привыкать к некоторым плохим практикам.)

 2
Author: MaxArt, 2012-09-01 20:39:02