【发布时间】:2021-07-29 12:31:26
【问题描述】:
stackoverflow 的窥视,所以我正在为我的网站处理这个事件。我真的很接近解决它,但我被困在一个问题上。问题是,当我试图显示自上次更新选项卡以来已经过了多少天时,我得到了一个 NaN 返回。请注意,我正在通过 ID 标签手动更新日期,其余的工作由 JavaScript 完成。这是我的 HTML 部分:
<span onload="manualDate('07-27-2021');" id="demoDate"></span>
这是每天获得MS的JS计算
const _MS_PER_DAY = 1000 * 60 * 60 * 24 * 30;
这部分是字符串日期和修改数字,如果它们是个位数
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1;
var yyyy = today.getFullYear();
if(dd<10)
{
dd='0'+dd;
}
if(mm<10)
{
mm='0'+mm;
}
在这里,我正在获取 HTML 跨度区域中的 id 值并使用该值并设置它
today = mm+'-'+dd+'-'+yyyy;
var newSetdate;
function manualDate(a) {
newSetdate = '"' + a + '"';
return newSetdate;
}
最后,这是将所有内容联系在一起的功能。出于某种原因,diffrence 的值是NaN,我不知道为什么。
function dateDiffInDays(a, b) {
const utc1 = Date.UTC(a.getMonth(), a.getDate(), a.getFullYear());
const utc2 = Date.UTC(b.getMonth(), b.getDate(), b.getFullYear());
return Math.floor((utc2 - utc1) / _MS_PER_DAY);
}
const a = new Date('"' + newSetdate +'"'),
b = new Date('"' + today +'"'),
difference = dateDiffInDays(a, b);
document.getElementById("demoDate").innerHTML = difference + " days ago";
【问题讨论】:
-
我建议你使用像Luxon这样的日期库
-
欢迎来到 Stack Overflow!访问help center,使用tour 了解内容和How to Ask。如果您遇到困难,请发布您的尝试minimal reproducible example,并使用
[<>]sn-p 编辑器记录输入和预期输出。 -
你需要检查
Date.UTC的文档——你给它的参数顺序错误。 -
至少在 Safari 中,
new Date('07-27-2021')返回一个无效的日期,参见Why does Date.parse give incorrect results? -
鉴于 diffDate 函数将时间设置为零的日期作为参数,它可以简化为
Math.round((a - b) / 8.64e7)。
标签: javascript function date datetime frontend