Javascript Date Format не работает во всех браузерах - PullRequest
0 голосов
/ 24 апреля 2019

Так что я пытаюсь исправить таймер обратного отсчета JavaScript.Он работает в Chrome и Safari, но не работает в Firefox или Internet Explorer.Это связано с форматированием даты, тем более с часовым поясом.

У меня это работает, когда оно жестко запрограммировано, но мне нужно внедрить его в существующий код, который получает данные с сервера.В предоставленном коде Javascript, в строке timeString, когда я удаляю переменную часового пояса и добавляю 'T' в пустое пространство между переменными Month и hours, все работает.единственная проблема - я пытаюсь заставить его работать с включенным часовым поясом.

/// Код Hmtl

///

var Year = '2020';
var Month = '08';
var Day = '7';
var Hour = '04';
var Minute = '45';
var Timezone = 'GMT-5';

/// Javascript Code

/// Инициализируемые переменные ///

Year = typeof Year == 'undefined' ? null : Year;
Month = typeof Month == 'undefined' ? null : Month;
Day = typeof Day == 'undefined' ? null : Day;
Hour = typeof Hour == 'undefined' ? null : Hour;
Minute = typeof Minute == 'undefined' ? null : Minute;
Timezone = typeof Timezone == 'undefined' ? 'GMT-5': Timezone;

///

/// timestring ///

timeString = Year + '-' + Month + '-' + Day + ' ' + Hour + ':' + Minute  + ':00 ' + Timezone;

///

Так что это работает, это работает только в Chrome и Safari.В Firefox и IE он возвращается с NaN или неверной датой.Мне нужна помощь в получении правильного формата даты / времени для работы во всех браузерах.

1 Ответ

0 голосов
/ 24 апреля 2019

Рассматривали ли вы создание даты в JavaScript и затем обработку ее как объекта?

Он работает в Chrome и Safari, но не работает в Firefox или Internet Explorer

Это было протестировано в Firefox, IE11 и Chrome:

function createDate(year, month, day, hour, minute, offset) {
    // adjusts for time zone
    var nudgeHours = 0;
    try {
        nudgeHours = -1 * parseInt(offset.substring(3), 10); // chomp after 'GMT'; fix offset for GMT
    } catch(e) {
        console.warn(e);
    }
    // construct and return a GMT date, making sure to accommodate for milliseconds in our nudgeHours
    return new Date(Date.UTC(year, month - 1, day, hour, minute) + (nudgeHours*60*60*1000));
}

Тогда вы можете манипулировать этой датой так, как вам нужно, не беспокоясь о разборе различий между браузерами.

console.log("Before: " + timeString);

console.log("After: " + createDate(Year, Month, Day, Hour, Minute, Timezone));

Выход:

Before: 2020-08-7 04:45:00 GMT-5
After: Fri Aug 07 2020 05:45:00 GMT-0400 (Eastern Daylight Time)

Так что я пытаюсь исправить таймер обратного отсчета JavaScript

Без логики таймера трудно понять, где происходит подсчет (и, следовательно, трудно понять, почему был выбран вышеуказанный формат), но обработка его как объекта Date(...) также должна снизить вероятность взлома любого не стандартная дата арифметика.

В качестве предостережения, GMT-5 немного подозрительно отформатирован. Например, IST равен +5:30, поэтому nudgeHours предполагает, что GMT-5 - это пользовательский формат, против которого уже был закодирован таймер обратного отсчета, а не стандартизированный формат. К этому моменту IST должен быть GMT+5.5, чтобы вышеуказанная логика продолжала работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...