如何在nodejs中批量格式化时间戳
How to format timestamps in batch in nodejs
我用koajs写了一个webapp,数据库中的时间戳格式有点问题,有很多记录,每条记录都是这样格式化的。
{
"_id": {
"$oid": "61df7c96d649ac83eefa36d3"
},
"key": 1286756906,
"status": 1,
"name": "bill",
"starttime": 1642068153784,
"endtime": 1673604153784
}
我需要在前端以 2022-01-03 10:10:10
.
格式显示 starttime
和 endtime
我应该把时间戳格式化过程放在哪里?前端还是后端?
我目前的解决方案是后端,喜欢下面
list.js
.get("/list", async (ctx) => {
let allrecords = await db.myrecords.find();
await ctx.render("list", {
allrecords: allrecords.map(d => { d.endtime = new Date(d.endtime).getFullYear() + "-" + (new Date(d.endtime).getMonth()+1 < 10? '0'+ (new Date(d.endtime).getMonth()+1):(new Date(d.endtime).getMonth()+1)) + "-" + new Date(d.endtime).getDate() + " " + new Date(d.endtime).getHours() + ":" + (new Date(d.endtime).getMinutes()< 10 ? '0' + new Date(d.endtime).getMinutes():new Date(d.endtime).getMinutes()); return d}).map(d => { d.starttime = new Date(d.starttime).getFullYear() + "-" + (new Date(d.starttime).getMonth()+1 < 10? '0'+ (new Date(d.starttime).getMonth()+1):(new Date(d.starttime).getMonth()+1)) + "-" + new Date(d.starttime).getDate() + " " + new Date(d.starttime).getHours() + ":" + (new Date(d.starttime).getMinutes()< 10 ? '0' + new Date(d.starttime).getMinutes():new Date(d.starttime).getMinutes()); return d})
});
})
list.ejs
<% allrecords.forEach(function(item, i){%>
<div class="item">
<div>start: <%=item.starttime%></div>
<div>end: <%=item.endtime%></div>
</div>
<%})%>
我觉得这个方案效率太低了,还有其他有效的方案吗?
谢谢。
如果您只需要在客户端将这些时间值作为字符串,则在服务器端执行此操作很好。对于映射我会做:
.get("/list", async (ctx) => {
let allrecords = await db.myrecords.find();
await ctx.render("list", {
allrecords: allrecords.map(d => {
d.endtime = new Date(d.endtime).toISOString().
.replace('T', ' ').substr(0, 19);
d.starttime = new Date(d.starttime).toISOString().
.replace('T', ' ').substr(0, 19);
return d
});
});
})
那么您只需一次创建每个日期。
我用koajs写了一个webapp,数据库中的时间戳格式有点问题,有很多记录,每条记录都是这样格式化的。
{
"_id": {
"$oid": "61df7c96d649ac83eefa36d3"
},
"key": 1286756906,
"status": 1,
"name": "bill",
"starttime": 1642068153784,
"endtime": 1673604153784
}
我需要在前端以 2022-01-03 10:10:10
.
starttime
和 endtime
我应该把时间戳格式化过程放在哪里?前端还是后端?
我目前的解决方案是后端,喜欢下面
list.js
.get("/list", async (ctx) => {
let allrecords = await db.myrecords.find();
await ctx.render("list", {
allrecords: allrecords.map(d => { d.endtime = new Date(d.endtime).getFullYear() + "-" + (new Date(d.endtime).getMonth()+1 < 10? '0'+ (new Date(d.endtime).getMonth()+1):(new Date(d.endtime).getMonth()+1)) + "-" + new Date(d.endtime).getDate() + " " + new Date(d.endtime).getHours() + ":" + (new Date(d.endtime).getMinutes()< 10 ? '0' + new Date(d.endtime).getMinutes():new Date(d.endtime).getMinutes()); return d}).map(d => { d.starttime = new Date(d.starttime).getFullYear() + "-" + (new Date(d.starttime).getMonth()+1 < 10? '0'+ (new Date(d.starttime).getMonth()+1):(new Date(d.starttime).getMonth()+1)) + "-" + new Date(d.starttime).getDate() + " " + new Date(d.starttime).getHours() + ":" + (new Date(d.starttime).getMinutes()< 10 ? '0' + new Date(d.starttime).getMinutes():new Date(d.starttime).getMinutes()); return d})
});
})
list.ejs
<% allrecords.forEach(function(item, i){%>
<div class="item">
<div>start: <%=item.starttime%></div>
<div>end: <%=item.endtime%></div>
</div>
<%})%>
我觉得这个方案效率太低了,还有其他有效的方案吗?
谢谢。
如果您只需要在客户端将这些时间值作为字符串,则在服务器端执行此操作很好。对于映射我会做:
.get("/list", async (ctx) => {
let allrecords = await db.myrecords.find();
await ctx.render("list", {
allrecords: allrecords.map(d => {
d.endtime = new Date(d.endtime).toISOString().
.replace('T', ' ').substr(0, 19);
d.starttime = new Date(d.starttime).toISOString().
.replace('T', ' ').substr(0, 19);
return d
});
});
})
那么您只需一次创建每个日期。