Javascript日期格式不适用于所有浏览器

时间:2019-04-24 17:53:37

标签: javascript date

所以我正在尝试修复JavaScript倒数计时器。它可以在chrome和safari中使用,但不能在Firefox或Internet Explorer中使用。这与日期格式有关,更与时区有关。

当对其进行硬编码时,我可以使用它,但是我需要将其实现到现有代码中,该代码从服务器获取数据。在提供的Javascript代码中,在timeString行中,当我删除时区变量并在Month和hours变量之间的空白处添加“ T”时,它就可以正常工作。唯一的问题是我正在尝试使其与包含的var时区一起使用。

/// Hmtl代码

///

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

/// Javascript代码

///变量被初始化 ///

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 = Year + '-' + Month + '-' + Day + ' ' + Hour + ':' + Minute  + ':00 ' + Timezone;

///

因此,此方法仅适用于chrome和safari。在Firefox和IE中,它以NaN或无效日期返回。我正在寻求帮助的是获取正确的日期/时间格式以在所有浏览器中正常工作。

1 个答案:

答案 0 :(得分:0)

您是否考虑过构造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,以上逻辑才能继续正常工作。