Moment.js 格式不正确
Moment.js incorrect formatting
Moment 突然开始错误地格式化日期。就像,彻底改变他们。我不明白为什么。我制作了一个简短的视频,所以你可以看到这里发生了什么:https://youtu.be/WPLDiiWsfAo
下面是一些运行错误的代码:
activeProject() {
let proj = { ...this.$store.state.activeProject };
if (proj.Start) {
debugger;
proj.Start = moment(proj.Start).format("MM/DD/YYYY");
proj.End = moment(proj.End).subtract(1, "days").format("MM/DD/YYYY");
return proj;
} else return {};
},
proj.Start = "2021-03-01T00:00:00.000Z"
输出 02/28/2021
proj.End = "2021-03-08T00:00:00.000Z"
输出 03/06/2021
所以用moment格式化后,proj.Start
和proj.End
休息了1天。为什么要这样做?
在 ISO 8601 标准中,the Z
means UTC (Coordinated Universal Time),实际上是英国伦敦时间。
如果您在英国伦敦以西的时区(像我一样)并且伦敦的当前时间刚刚过去 00:00(就像我写这个答案的现在),您的问题将在下面重现。该片段将在同一时刻为位于伦敦以东时区的人输出正确的值。
let proj = {Start: "2021-03-01T00:00:00.000Z", End:"2021-03-08T00:00:00.000Z"}
proj.Start = moment(proj.Start).format("MM/DD/YYYY");
proj.End = moment(proj.End).subtract(1, "days").format("MM/DD/YYYY");
console.log(proj.Start, "expected: 03/01/2021")
console.log(proj.End, "expected: 03/07/2021")
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
通知现在没有 Z
...
let proj = {Start: "2021-03-01T00:00:00.000", End:"2021-03-08T00:00:00.000"}
proj.Start = moment(proj.Start).format("MM/DD/YYYY");
proj.End = moment(proj.End).subtract(1, "days").format("MM/DD/YYYY");
console.log(proj.Start, "expected: 03/01/2021")
console.log(proj.End, "expected: 03/07/2021")
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
所以你的问题是指定一个相对于 UTC 的 date/time,但它似乎不是你想要的。
您的解决方案是从使用的数据中删除最后的 Z
...
moment(...) is local mode. Ambiguous input (without offset) is assumed to be local time. Unambiguous input (with offset) is adjusted to local time.
Moment 突然开始错误地格式化日期。就像,彻底改变他们。我不明白为什么。我制作了一个简短的视频,所以你可以看到这里发生了什么:https://youtu.be/WPLDiiWsfAo
下面是一些运行错误的代码:
activeProject() {
let proj = { ...this.$store.state.activeProject };
if (proj.Start) {
debugger;
proj.Start = moment(proj.Start).format("MM/DD/YYYY");
proj.End = moment(proj.End).subtract(1, "days").format("MM/DD/YYYY");
return proj;
} else return {};
},
proj.Start = "2021-03-01T00:00:00.000Z"
输出 02/28/2021
proj.End = "2021-03-08T00:00:00.000Z"
输出 03/06/2021
所以用moment格式化后,proj.Start
和proj.End
休息了1天。为什么要这样做?
在 ISO 8601 标准中,the Z
means UTC (Coordinated Universal Time),实际上是英国伦敦时间。
如果您在英国伦敦以西的时区(像我一样)并且伦敦的当前时间刚刚过去 00:00(就像我写这个答案的现在),您的问题将在下面重现。该片段将在同一时刻为位于伦敦以东时区的人输出正确的值。
let proj = {Start: "2021-03-01T00:00:00.000Z", End:"2021-03-08T00:00:00.000Z"}
proj.Start = moment(proj.Start).format("MM/DD/YYYY");
proj.End = moment(proj.End).subtract(1, "days").format("MM/DD/YYYY");
console.log(proj.Start, "expected: 03/01/2021")
console.log(proj.End, "expected: 03/07/2021")
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
通知现在没有 Z
...
let proj = {Start: "2021-03-01T00:00:00.000", End:"2021-03-08T00:00:00.000"}
proj.Start = moment(proj.Start).format("MM/DD/YYYY");
proj.End = moment(proj.End).subtract(1, "days").format("MM/DD/YYYY");
console.log(proj.Start, "expected: 03/01/2021")
console.log(proj.End, "expected: 03/07/2021")
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
所以你的问题是指定一个相对于 UTC 的 date/time,但它似乎不是你想要的。
您的解决方案是从使用的数据中删除最后的 Z
...
moment(...) is local mode. Ambiguous input (without offset) is assumed to be local time. Unambiguous input (with offset) is adjusted to local time.