我正在尝试从一个时区转换为另一个(手动)获取一个 Date 对象并通过此函数返回另一个:
getDateInMomentFormatToSave: function (date) {
function padNums(num) {
return num.toString().length == 1 ? "0" + num : num;
}
var month = padNums(date.getMonth() + 1);
var day = padNums(date.getDate());
var hour = padNums(date.getHours());
var minutes = padNums(date.getMinutes());
var result = moment(date.getFullYear() + "-" + month + "-" + day + " " + hour + ":" + minutes, "YYYY-MM-DD HH:mm");
var sourceMoment = moment.tz(result, "America/Mexico_City"); //UTC neutro de la BD moment.tz.guess()
var localMoment = sourceMoment.clone().tz("Europe/Lisbon").format('YYYY-MM-DD[T]HH:mm:ss');
return new Date(localMoment.substring(0, 19));
}
一个例子是:
- 日期日期 = 2018 年 8 月 17 日星期五 14:36:25 GMT+0200 (hora de verano de Europa central)
- Moment sourceMoment = "2018-08-17 14:36" Moment
- localMoment = "2018-08-17T13:36:00"
为什么墨西哥 -> 里斯本只提前一小时?据我所知,localmoment 应该是“2018-08-17T20:36:00”。
我究竟做错了什么?这似乎适用于欧洲/里斯本到欧洲/马德里,但我不知道为什么。
谢谢。
解决方案:
var result = moment.tz(date.getFullYear() + "-" + month + "-" + day + " " + hour + ":" + minutes, "America/Mexico_City");
var localMoment = result.clone().tz("Europe/Lisbon").format('YYYY-MM-DD[T]HH:mm:ss');