【问题标题】:JavaScript .getDate gives +1 day sometimes, could it be a format issueJavaScript .getDate 有时会给出 +1 天,这可能是格式问题
【发布时间】:2020-10-17 08:09:35
【问题描述】:

我正在使用这个简单的函数来获取 YYYYMMDD 格式:

const yyyymmdd = (date) => {
    const day = date.getDate()
    const month = date.getMonth() + 1
    const year = date.getFullYear()

    console.log(date, day)

    let dayZero = (day < 10) ? "0" + day : day
    let monthZero = (month < 10) ? "0" + month : month

    return  year + "-" + monthZero + "-" + dayZero    
}

注意打印日期和日期的 console.log。

不同日期的几次调用的输出是:

2020-10-18T06:36:31.116Z 18
2020-10-19T06:36:31.116Z 19
2020-10-20T06:36:31.116Z 20
2020-10-21T06:36:31.116Z 21
2020-10-22T06:36:31.116Z 22
2020-10-23T06:36:31.117Z 23
2020-10-24T06:36:31.117Z 24

2020-10-15T22:58:36.021Z 16
2020-10-15T22:58:36.021Z 16
2020-10-15T22:58:36.021Z 16
2020-10-15T22:58:36.021Z 16
2020-10-16T22:58:36.021Z 17

最后 5 个结果的日期不准确。上面正确的是用以下函数构建的,并给出了预期的结果:

return new Date(new Date().getTime() + i * 24 * 60 * 60 * 1000)

但错误的是来自 MongoDB 存储为字符串,然后转换为日期如下:

new Date(mongo_db_string_date)

谁能帮我理解为什么会这样?它们似乎是相同的日期格式,但可能不是。如何解析以获得正确的结果?

【问题讨论】:

  • 这听起来像是时区问题。 Date 函数在计算日、月等时使用系统中的区域信息。因此,您需要确保所有计算都使用 UTC,或者手动考虑时区
  • @JaromandaX 这是存储在 Mongo 中的字段:``` { start_date: '2020-10-15T22:58:36.021Z' } ``
  • 这是一个时区问题。日期以 UTC 时间显示,您的本地时区不同。最后五个表示您的时间至少比 UTC 时间早 2 小时 - 因此,UTC 中的 22:38 在您的时区中是 00:38、01:38、02:38 等。第一个可以,因为 UTC 时间的上午 06:36 仍然与您所在时区的日期相同 - 因此,可能是您当地时间的 08:36、09:36、10:36 等..
  • @J.Diaz 你能举个例子说明mongo_db_string_date 是什么值,结果日期是什么 - 我的意思是,这就是你有问题的地方吗? new Date(mongo_db_string_date) 显然是错误的,所以......为什么不举个例子
  • @JaromandaX 但配置文件可能会产生误导!他可能常驻英国,但目前在比英国时间早 2 或 3 小时的芬兰工作。

标签: javascript datetime dom


【解决方案1】:

您生成的日期在同一时区。 很确定mongo_db_string_date 有自己的时区信息并导致这种差异。 抱歉,这应该是一条评论,但我没有足够的积分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2011-09-09
    • 2011-05-08
    • 1970-01-01
    • 2021-03-18
    相关资源
    最近更新 更多