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