Simple JS 适用于所有浏览器,但 safari
Posted
技术标签:
【中文标题】Simple JS 适用于所有浏览器,但 safari【英文标题】:Simple JS works on every browser but safari 【发布时间】:2017-05-10 01:43:07 【问题描述】:常见的头痛,但每个答案似乎都是独一无二的,我有一些简单的 JS 倒计时到 12 月 15 日,这个倒计时适用于每个浏览器,除了我在 safari 上的每一天、每一小时、每一分钟都得到“NaN”。
<p id="clockdiv" class="decofont ">
<span class="days"></span>
<span class="hours"></span>
<span class="minutes"></span></p>
<!--302 D | 21 H | 48 M december 15 2017 -->
var deadline = '12 15 2017';
function getTimeRemaining()
var t = Date.parse('12 15 2017') - Date.parse(new Date());
var seconds = Math.floor((t / 1000) % 60);
var minutes = Math.floor((t / 1000 / 60) % 60);
var hours = Math.floor((t / (1000 * 60 * 60)) % 24);
var days = Math.floor(t / (1000 * 60 * 60 * 24));
var time =
'total': t,
'days': days,
'hours': hours,
'minutes': minutes,
'seconds': seconds
;
var output_time = document.getElementById('clockdiv');
output_time.innerhtml = days + ' D | ' + hours + ' H | ' + minutes + ' M';
setTimeout(getTimeRemaining, 60000);
getTimeRemaining(deadline);
如果您有指向 JS 跨浏览器兼容性的链接(不适用于所有浏览器的常用功能),则可获得奖励积分。是什么导致这在 safari 上中断,最简单的选择是什么?
【问题讨论】:
如果我 不得不 猜测,我会说这是因为你有deadline
格式化的方式。我会将其格式化为 DD/MM/YY 而不是 DD MM YY(带空格)。
根据this 可能是 date.parse() ,但问题又是旧的,所以从那时起兼容性可能已经得到修复。
请看Why does Date.parse give incorrect results?。
【参考方案1】:
问题的根源在于您正在解析一个字符串并期望所有浏览器都以相同的方式解析它。日期字符串的解析几乎完全取决于实现,只有一种格式(ISO 8601 扩展)需要支持 ECMA-262。
所以就行了:
var t = Date.parse('12 15 2017') - Date.parse(new Date());
您应该使用 Date 构造函数。另外,您不应该使用Date.parse(new Date())
,而应使用new Date
或Date.now()
所以:
var t = new Date(2017,11,15) - new Date();
这将返回两个日期之间的毫秒差:
console.log(new Date(2017,11,15) - new Date());
另见Difference between dates in javascript。
【讨论】:
以上是关于Simple JS 适用于所有浏览器,但 safari的主要内容,如果未能解决你的问题,请参考以下文章
WebRTC onicecandidate 不会在 chrome for android 上触发,但适用于所有其他浏览器,包括适用于 android 的 firefox
如何使用 vue.js 创建适用于单个元素的显示更多/更少按钮?
从 JavaScript 添加到浏览器收藏夹/书签,但适用于所有浏览器(我的在 Chrome 中不起作用)?
网站的 javascript 适用于 android、windows、linux 和所有浏览器,但不适用于 mac、ios 在任何浏览器上