nodejs 中时间戳格式化的问题

请问,想将数据库中的时间戳在页面上以 2022-01-12 10:10:10 这样的格式显示在页面上,那应该是在前端对时间戳进行格式化处理,还是在后端进行处理呢?

数据格式

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

我当前是先在后端进行处理

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

然后在前端直接读出来

<% allrecords.forEach(function(item, i){%>
 <div class="item">
 <div>start: <%=item.starttime%></div>
 <div>end: <%=item.endtime%></div>
 </div>
<%})%>

数据少还行,但数据量多了,明显感觉执行效率太低了,请问正确的做法是什么呢?谢谢!

阅读 2.6k
3 个回答

通常格式化都在前端,因为前端是可以直接拿到用户的本地时区的,后端无法直接获取

后端只保存和处理 UTC 时间,格式由前端格式化并渲染。

你这个问题其实前后端处理问题都不大,协商好就行了。你所说的数据量多了,执行效率太低了其实也不存在,一般来说对于前端需要显示这个地方要么分页,要么要的数据量也很小。对于后端来说也不会,一个时间格式的处理对于现代的处理器来说,绝对是很快的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题