【问题标题】:How to find date using moment in mongoose with date type如何在日期类型的猫鼬中使用时刻查找日期
【发布时间】:2020-05-27 08:46:25
【问题描述】:

我想在 mongo db 中按日期类型搜索我有一个问题,当我使用 moment 时它会更改我的默认日期,所以我不明白为什么它会使用相同的代码更改我的日期

这是我尝试的方法

    let params = {}
    let date = "2020-05-27" //I send it in String Type

    const newDate = new Date(date)
    const start = moment(newDate).startOf('day')
    const end = moment(newDate).endOf('day')
    console.log(newDate)
    console.log(start._d, end._d)
    Object.assign(params, { updatedAt: { $gte: start, $lte: end } })
    await Order.find(params)

当我发送第一个请求时,它会返回正确的日期并收集默认值,但在我再发送 1 个请求后,我的 start._d 更改值,而我的日期是相同的值

这是我的第一个控制台日志

api              | 2020-05-27T00:00:00.000Z //date
api              | 2020-05-27T00:00:00.000Z (start.d)  2020-05-27T16:59:59.999Z (end.d)

这是我的第二个 console.log

  api            | 2020-05-27T00:00:00.000Z //date
api              | 2020-05-26T17:00:00.000Z(start.d) 2020-05-26T23:59:59.999Z(end.d)

正如你所见,为什么我的 start.d -1 天而我的日期第一次是相同的值

在我发送更多请求后,它将显示相同的第二个 console.log

【问题讨论】:

    标签: javascript node.js mongodb mongoose momentjs


    【解决方案1】:

    我仍然不知道为什么,但我通过静态设置所有日期来修复它

    let newDate = moment(date, 'YYYY-MM-DD')
        // let start = moment(newDate).startOf('day')
    
        let start = newDate.toDate() // This will return a copy of the Date that the moment uses
        start.setHours(0)
        start.setMinutes(0)
        start.setSeconds(0)
        start.setMilliseconds(0)
        let end = newDate.toDate()
        end.setHours(23)
        end.setMinutes(59)
        end.setSeconds(59)
        end.setMilliseconds(59)
    

    【讨论】:

    • 我猜 moment(date, 'YYYY-MM-DD').startOf('day')moment(date, 'YYYY-MM-DD').endOf('day') 可以同样好用
    猜你喜欢
    • 1970-01-01
    • 2014-07-14
    • 2013-07-07
    • 2017-03-12
    • 2012-02-17
    • 2022-07-07
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    相关资源
    最近更新 更多