javascript - 使用 setInterval 方法时 MomentJS 不起作用
问题描述
我正在使用 moment.js 将时间戳转换为可读形式,例如“8 分钟前”!
我正在使用 setInterval 每 1 秒更新一次代码以动态更新时间,但它根本不起作用。帮我!
代码:
let timer = () => {
let time = document.getElementsByClassName('timeago');
for(let i = 0; i < time.length; i++) {
time[i].innerText = moment(time[i].innerText, "YYYY-MM-DD h:mm:ss").tz("Asia/Kathmandu").fromNow();
}
};
setInterval(timer, 1000);
<span class="timeago">2018-05-15 09:21:00</span>
<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>
解决方案
moment
每次函数运行时,您都将元素的文本解析为字符串(并告诉根据“YYYY-MM-DD h:mm:ss”来解释它)。取而代之的是,只保存该时刻一次,并在一段时间内计算它与现在之间的差异。
您还需要让 Moment 正确格式化它。您的元素具有09:21:00
但 Moment 格式字符串是h:mm:ss
- 在两位数小时的情况下将不起作用。
const timeagoSpan = document.querySelector('.timeago');
const from = moment(timeagoSpan.textContent, "YYYY-MM-DD hh:mm:ss");
let timer = () => {
timeagoSpan.textContent = from.fromNow();
};
timer();
setInterval(timer, 1000);
<span class="timeago">2018-05-14 22:21:00</span>
<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>
推荐阅读
- java - 如何简化 testng XML 文件中的参数传递?
- django - 如何正确解包元组并显示它?
- c++ - QSerialPort 在应用程序启动之前正在使用中
- android - 如何将现有的 SQLite 数据库连接到 ROOM Android?
- typescript - 从 Typescript 中的文件中获取导出的函数名称
- r - 制作具有正值和负值的条形图
- c# - IdentityBuilder 不包含“AddEntityFrameworkStores”的定义
- reactjs - 在 ReactJs 中使用 NavLink 或 Link 代替 href
- ios - 通话后恢复 AVPlayer
- python - 如何使用 Graphene-Django Relay 中的外键关系更新模型?