【问题标题】:How to format timestamps in batch in nodejs如何在nodejs中批量格式化时间戳
【发布时间】:2022-01-14 16:20:55
【问题描述】:

我用koajs写了一个webapp,数据库中的时间戳格式有点问题,记录很多,每条记录都是这样的格式。

{
    "_id": {
        "$oid": "61df7c96d649ac83eefa36d3"
    },
    "key": 1286756906,
    "status": 1,
    "name": "bill",
    "starttime": 1642068153784,
    "endtime": 1673604153784
}

我需要在前端显示starttimeendtime,格式类似于2022-01-03 10:10:10

  1. 我应该将时间戳格式化过程放在哪里?前端还是后端?

  2. 我目前的解决方案是后端,如下所示

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>
<%})%>

我觉得这个解决方案效率太低了,有没有其他有效的解决方案?

谢谢。

【问题讨论】:

    标签: node.js ejs koa


    【解决方案1】:

    如果您只需要这些时间值作为客户端的字符串,那么在服务器端执行它就可以了。对于我会做的映射:

    .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
            });
        });
    })
    
    

    那么您将只创建一次每个日期。

    【讨论】:

    • 谢谢,我在客户端试过了,用toLocaleString(),好像更好。
    猜你喜欢
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2019-02-17
    • 2012-06-24
    相关资源
    最近更新 更多