javascript - js字符串到日期时间加2小时
问题描述
我正在使用 PHP Api 女巫给我这个 json:
{
"title": "hemen",
"category": "time",
"start": "2021-09-27T09:22:00+00:00",
"end": "2021-09-27T13:22:00+00:00",
"isAllDay": false,
"calendar": [{"id": 1}],
"body": null
}
问题是在我的前端(Vue)中,我将开始日期和结束日期转换为日期时间,但它增加了 2 小时,我不知道为什么或修复它的最佳选择。
axios.get('/api/schedules.json').then(function (response) {
let dataOri = response.data;
// convert
dataOri.forEach(element => {
element.start = moment(element.start, "YYYY-MM-DDTHH:mm:ssZ").format("YYYY-MM-DD HH:mm:ss");
console.log(element.start); // prints '2021-09-27 11:22:00' instead of '2021-09-27 09:22:00'
element.end = moment(element.end, "YYYY-MM-DDTHH:mm:ssZ").format("YYYY-MM-DD HH:mm:ss");
console.log(element.end); // prints '2021-09-27 15:22:00' instead of '2021-09-27 13:22:00'
});
self.filterSchedules = dataOri;
});
解决方案
您正在使用“原始时间在指定时区内” (+00:00)的信息解析时间,然后以当地时间打印。
有两种方法可以处理这种情况,您可以:
- 完全忽略这些时区(不好的方法)
- 包含/解析此时区信息并以原始UTC 时间输出(好方法)
var dateAsStr = "2021-09-27T09:22:00+00:00";
var resultWrong = moment(dateAsStr, "YYYY-MM-DDTHH:mm:ssZ").format("YYYY-MM-DD HH:mm:ss");
var resultBadApproach = moment(dateAsStr, "YYYY-MM-DDTHH:mm:ss").format("YYYY-MM-DD HH:mm:ss");
var resultGoodAproach = moment(dateAsStr, "YYYY-MM-DDTHH:mm:ssZ").utc().format("YYYY-MM-DD HH:mm:ss");
console.log("wrong: " + resultWrong);
console.log("correct (bad approach): " + resultBadApproach);
console.log("correct (good approach): " + resultGoodAproach);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>