1

あるタイムゾーンから別のタイムゾーンに(手動で)変換しようとしています 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));
            }

1 つのケースは次のとおりです。

  • 日付 date = Fri Aug 17 2018 14:36:25 GMT+0200 (hora de verano de Europa central)
  • モーメント sourceMoment = "2018-08-17 14:36" Moment
  • localMoment = "2018-08-17T13:36:00"

なぜメキシコ -> リスボンは 1 時間しか進んでいないのですか? 私が知っているように、ローカルモーメントは「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');
4

1 に答える 1