【发布时间】: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