我正在使用此功能根据当前用户时区将UTC时间戳转换为日期
let timeConversion = (new Date().getTimezoneOffset() * -1 / 60) * 60 * 60;
function formatTime(time) {
let d = new Date(((time + timeConversion) * 1000));
return (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());
}
let allDates = document.getElementsByClassName("candidatedate");
Array.prototype.forEach.call(allDates, function(el) {
el.innerHTML = formatTime(parseInt(el.innerHTML));
el.className = "candidatedate";
});
<span class="candidatedate">1604263179</span><span class="candidatedate">1604263177</span><span class="candidatedate">1604263176</span>
当我尝试查看显示NAN NAN NAN NAN的页面时,该代码在除iOS之外的所有平台上均能正常运行,问题是我无法在ios Safari上调试代码(我没有USB电缆用于我的IPHONE)。有人可以帮我吗?谢谢
答案 0 :(得分:0)
我强烈建议您使用moment JS使用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
。我的猜测是time
变量存在问题。
它来自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)
之类的代码而失败。因此,也许添加“不进行第二次检查”可能帮助。
答案 1 :(得分:0)
问题源于iOS试图变得非常聪明-并认识到您的时间字符串可能是电话号码。
长度与标准的美国电话号码匹配,因此iOS将它们包装为链接,从而允许用户单击并拨打电话。 1604263177
变成<a href="tel:1604263177">1604263177</a>
,依此类推。我怀疑Android和其他手机可能会显示类似的行为。
最简单的解决方案是从innerHTML
切换到innexText
。
Array.prototype.forEach.call(allDates, function(el) {
const input = parseInt(el.innerText, 10);
el.innerHTML = input ? formatTime(input) : "";
el.className = "candidatedate";
});
答案 2 :(得分:0)
function formatTime(time){return(new Date(time- (new Date().getTimezoneOffset()*60000) ))}
//now basically 1 hr is 60000 units of the unit 'time' so that's my logic
//also new Date(randomTimeStamp) produces a new date off of that recorded timestamp
let d=formatTime(new Date().getTime())
console.log(d.toDateString()+" "+d.toLocaleTimeString()) //im not gonna copy a number when i can make one on the dot for illustration ;]
//also, d is what the actual value u want, i just logged something that seems like it
答案 3 :(得分:0)
更新:
问题是野生动物园会自动将数字转换为链接。
我通过使用:
解决了这个问题<meta name="format-detection" content="telephone=no">