Javascript在IOS上返回NAN

Javascript在IOS上返回NAN,javascript,Javascript,我使用此函数根据当前用户时区将UTC时间戳转换为日期 let timeConversion=(new Date().getTimezoneOffset()*-1/60)*60*60; 函数格式化时间(time){ 设d=新日期(((时间+时间转换)*1000)); 返回(d.getUTCDate()

我使用此函数根据当前用户时区将UTC时间戳转换为日期

let timeConversion=(new Date().getTimezoneOffset()*-1/60)*60*60;
函数格式化时间(time){
设d=新日期(((时间+时间转换)*1000));
返回(d.getUTCDate()<10?'0'+d.getUTCDate():d.getUTCDate())+'/'+
(d.getUTCMonth()+1<10?'0'+(d.getUTCMonth()+1):(d.getUTCMonth()+1))+/'+
d、 getUTCFullYear().toString().substr(2,4)+”+
(d.getUTCHours()<10?'0'+d.getUTCHours():d.getUTCHours())+':'+
(d.getUTCMinutes()<10?'0'+d.getUTCMinutes():d.getUTCMinutes());
}
让allDates=document.getElementsByClassName(“候选日期”);
Array.prototype.forEach.call(allDates,function(el){
el.innerHTML=formatTime(parseInt(el.innerHTML));
el.className=“候选国”;
});

160426317916042631771604263176
我强烈建议您使用
format
方法使此代码可读

或者至少写得更像这样

function formatTime(time) {
   let d = new Date(((time + timeConversion) * 1000));
   return
      ('0' + d.getUTCDate()).slice(-2)
      + '/' +
      ('0' + (d.getUTCMonth() + 1) ).slice(-2)
      + '/' +
      d.getUTCFullYear().toString().substr(2, 4)
      + ' ' + 
      ('0' + d.getUTCHours()).slice(-2)
      + ':' +
      ('0' + d.getUTCMinutes()).slice(-2)
      ;
};
所以你得到了
NAN
。我猜是时间变量的问题。 它来自
el.innerHTML
,一个用parseInt转换的字符串

您能试着显示它来验证值吗? 就这么小小的改动

Array.prototype.forEach.call(allDates, function(el) {
   const before = el.innerHTML;
   const after = formatTime(parseInt(el.innerHTML));
   el.innerHTML = `${before} // ${after}`;
   el.className = "candidatedate";
});

这一切都是对的,你应该考虑这个代码不能运行不止一次的事实…或者,它会失败,比如
parseInt('12/10/20 04:22)
。。因此,添加一个“检查无二次运行”可能会有所帮助。

问题源于iOS试图变得非常聪明,并且认识到你的时间字符串可能是电话号码

长度与标准美国电话号码相匹配,因此iOS将其包装为链接,允许用户点击和呼叫
1604263177
变成
等等。我怀疑Android和其他手机可能会表现出类似的行为

最简单的解决方案是从
innerHTML
切换到
innexText

Array.prototype.forEach.call(所有日期,函数(el)){
const input=parseInt(el.innerText,10);
el.innerHTML=输入?格式时间(输入):“”;
el.className=“候选国”;
});
函数formatTime(time){return(新日期(time-(新日期().getTimezoneOffset()*60000))}
//现在基本上1小时等于60000单位时间,这就是我的逻辑
//另外,“新日期”(randomTimeStamp)会根据记录的时间戳生成新日期
设d=formatTime(新日期().getTime())
console.log(d.toDateString()+“”+d.toLocaleTimeString())//我不会复制一个数字,因为我可以当场制作一个数字来进行说明;]
//另外,d是你想要的实际值,我刚刚记录了一些看起来像是更新:

问题是safari自动将数字转换为链接

我用以下方法解决了这个问题:

<meta name="format-detection" content="telephone=no">


我只看到一个返回标志,就像你试图编写高尔夫运动的代码,但是你变成了:l你想要返回什么样的示例?@thebombband是的,兄弟,我确实尝试过,但找不到任何解决方案,特别是当我无法在safari IOS上调试代码时,尝试了用户代理切换器,尝试过safari dev switch agent…你举了一个你想要返回的示例,我会给出一个答案如果你还显示了你输入代码的类型,这将有助于调试这个问题。目前,最大的嫌疑是
parseInt(el.innerHTML)
,如果输入不能被解析,你会得到
NaN
,但是没有进一步的信息很难说。你是对的。事实上,在桌面上,我得到的是1604263177,而在电话里,我得到的是一个链接。我不知道为什么!看起来像是一个
Ho,开发人员想显示一个电话号码,让我们帮助他,我们是一个如此智能的手机
bad story:)保持信心。