所以我正在尝试修复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或无效日期返回。我正在寻求帮助的是获取正确的日期/时间格式以在所有浏览器中正常工作。
答案 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
,以上逻辑才能继续正常工作。