如何仅获取这种格式(年-月-日)或(日-月-年)的日期?

发布于 2025-01-09 04:25:46 字数 1526 浏览 0 评论 0原文

我有 index.ejs 文件来输出书籍对象,如下所示:


<tbody>
          <% for (let i = 0; i < books.length; i++) { %> 
          <tr>
            <td><%= i+1 %> </td>
            <td><%= books[i].name %> </td>
            <td><%= books[i].author %> </td>
            <td><%= books[i].date %> </td>
            <td>
              <a href="/update-book?id=<%= books[i]._id  %> ">
                <span><i class="fas fa-pencil-alt"></i></span>
              </a>
              <a href="/delete-book?id=<%= books[i]._id %> " >
                <span><i class="fas fa-times"></i></span>
              </a>
            </td>
          </tr>
          <% } %> 
        </tbody>

然后,我使用下面的表单输入所有详细信息,并使用发布请求将数据保存在 mongodb 中,包括日期:

      <form action="/api/books" method="POST">
        <div>
          <label for="date">Date</label>
          <input type="date" name="date" value="" placeholder="" />
        </div>
     </form>

数据对象的架构模型看起来像这样,我将日期类型用作“日期”。

var schema = new mongoose.Schema({
  ...
  date: {
    type: Date,
  },
  ...
})

日期保存在数据库中,如下所示:2022-02-22T00:00:00.000Z。

如果我使用类型:String,那么它会像这样保存在数据库中:Tue Feb 22 2022 06:00:00 GMT+0600(孟加拉国标准时间)。

但我只想以这种格式保存日期:yyyy/mm/dd

我该怎么做?

I have the index.ejs file to output the books object like this:


<tbody>
          <% for (let i = 0; i < books.length; i++) { %> 
          <tr>
            <td><%= i+1 %> </td>
            <td><%= books[i].name %> </td>
            <td><%= books[i].author %> </td>
            <td><%= books[i].date %> </td>
            <td>
              <a href="/update-book?id=<%= books[i]._id  %> ">
                <span><i class="fas fa-pencil-alt"></i></span>
              </a>
              <a href="/delete-book?id=<%= books[i]._id %> " >
                <span><i class="fas fa-times"></i></span>
              </a>
            </td>
          </tr>
          <% } %> 
        </tbody>

Then, I use this form below to type the all the details and use a post request to save the data in mongodb including the date:

      <form action="/api/books" method="POST">
        <div>
          <label for="date">Date</label>
          <input type="date" name="date" value="" placeholder="" />
        </div>
     </form>

The schema model of the data object looks like this where I used the type for the date as 'Date'

var schema = new mongoose.Schema({
  ...
  date: {
    type: Date,
  },
  ...
})

The date gets saved in the database like this: 2022-02-22T00:00:00.000Z.

If I use type: String, then it gets saved in the database like this: Tue Feb 22 2022 06:00:00 GMT+0600 (Bangladesh Standard Time).

But I only want to save the date in this format: yyyy/mm/dd

How do I do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

落叶缤纷 2025-01-16 04:25:46

那么,您可以使用 $dateToString 聚合管道运算符。
例如,您可能希望以 mm/dd/yyyy 格式返回日期,而不是包含分钟、秒、毫秒等的长 ISODate() 格式

$dateToString 运算符将 Date 对象转换为字符串,并且可以选择允许您指定结果输出的格式。

让我们在代码中看看:
假设我们有一个名为 cats 的集合,其中包含以下文档:

{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
{ "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:20.112Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:01.007Z") }

我们可以使用 $dateToString 返回具有不同格式日期的文档。

我们可以使用 format 参数来格式化日期。这是一个可选参数,允许您使用零个或多个格式说明符来指示应如何格式化日期。

假设我们想要 dd/mm/yyyy 格式的日期:
以下是将日期转换为 dd/mm/yyyy 格式的示例:

db.cats.aggregate(
   [
     {
       $project: {
          _id: 0,
          formattedDate: { $dateToString: { format: "%d/%m/%Y", date: "$born" } }
       }
     }
   ]
)

结果:

{ "formattedDate" : "03/01/2021" }
{ "formattedDate" : "08/12/2019" }
{ "formattedDate" : "24/09/2020" }

您还可以使用 $dateToParts 运算符返回包含所有不同日期部分的文档各自进入自己的领域。
我认为这回答了你的问题。

Well, you can use the $dateToString aggregate pipeline operator.
For example, you might want a date to be returned in mm/dd/yyyy format instead of the long ISODate() format that includes minutes, seconds, milliseconds, etc

The $dateToString operator converts the Date object to a string, and optionally allows you to specify a format for the resulting output.

Let's see this in code:
Suppose we have a collection called cats with the following documents:

{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
{ "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:20.112Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:01.007Z") }

We can use $dateToString to return that document with the dates in a different format.

We are able to format the date by using the format parameter. This is an optional parameter that allows you to use zero or more format specifiers to indicate how the date should be formatted.

Suppose we want date in dd/mm/yyyy format:
Here’s an example that converts the dates to dd/mm/yyyy format:

db.cats.aggregate(
   [
     {
       $project: {
          _id: 0,
          formattedDate: { $dateToString: { format: "%d/%m/%Y", date: "$born" } }
       }
     }
   ]
)

Result:

{ "formattedDate" : "03/01/2021" }
{ "formattedDate" : "08/12/2019" }
{ "formattedDate" : "24/09/2020" }

You can also use the $dateToParts operator to return a document that contains all the various date parts separated into their own field.
I think that answers your question.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文