“接收”;无效日期“;尝试使用Javascript呈现日期时

“接收”;无效日期“;尝试使用Javascript呈现日期时,javascript,node.js,mongodb,date,express,Javascript,Node.js,Mongodb,Date,Express,在使用Node、Express、MongoDB和EJS作为视图引擎的CRUD应用程序中,我在尝试在视图页面上呈现日期时遇到错误。UI和正在单元格中输出“无效日期”。当我在repl.it上测试它时,它运行正常,我在这里做错了什么 从my Controller.js文件: //show events function showEvents(req, res) { //get all events Event.find({}, (err, events) => { if(err)

在使用Node、Express、MongoDB和EJS作为视图引擎的CRUD应用程序中,我在尝试在视图页面上呈现日期时遇到错误。UI和正在单元格中输出“无效日期”。当我在repl.it上测试它时,它运行正常,我在这里做错了什么

从my Controller.js文件:

//show events
function showEvents(req, res) {
  //get all events
  Event.find({}, (err, events) => {
    if(err) {
      res.status(404);
      res.send('Events not Found');
    }

    let dates = [];

    for (i = 0; i < events.length; i++) {
      let date = new Date(events[i].date);
      dates.push(date.toDateString());
    };
    console.log(dates);
    //correct data

    // return a view with data
    res.render('pages/events', {
      events: events,
      dates: dates,
      success: req.flash('success')
    });
  });
}
//显示事件
函数showEvents(请求、恢复){
//获取所有事件
Event.find({},(err,events)=>{
如果(错误){
物质状态(404);
res.send(“未找到事件”);
}
让日期=[];
对于(i=0;i
从my Events.EJS文件:

<tbody>

 <% for (var i = 0; i < events.length; i++) { %>
      <tr>
        <td><%= events[i].name %></td>
        <td><%= events[i].description %></td>
        <td><%= dates[i] %></td>
        <td><%= events[i].course %></td>
        <td><%= events[i].slope %></td>
        <td><%= events[i].rating %></td>
        <td><%= events[i].score %></td>
        <td><%= events[i].front %></td>
        <td><%= events[i].back %></td>
        <td>
          <a href="/events/<%= events[i].slug %>" class="btn btn-sm btn-primary">View</a>
          <a href="/events/<%= events[i].slug %>/edit" class="btn btn-sm btn-primary">Edit</a>
          <a href="/events/<%= events[i].slug %>/delete" class="btn btn-sm btn-danger">Delete</a>
        </td>
      </tr>
    <% } %>

  </tbody>


您需要console.log(events[i].date)查看返回的格式。日期的构造函数无法分析所有日期格式。您需要确保以正确的格式返回日期。我在终端中看到了这一点,['无效日期','无效日期','无效日期']。但我不知道我在转换中犯了什么错误,因为如果我将它写为events[I].date,它会以mongoDB日期格式输出正确的日期。我是个白痴。信息没有呈现,因为我将Mongoose中的模式更改为“createdAt”,而不是“date”。一旦我做了更改,信息就会准确地呈现出来。我猜
events[I].date
是一个字符串,并且没有被日期构造函数正确解析。黄金法则是永远不要用日期构造函数(或Date.parse)解析字符串,因为它在很大程度上依赖于实现且不一致。编写一个小函数(2或3行)来解析字符串,或者使用库。