我试图根据所选时区转换日期。我惊讶地看到5分钟时差的日期相同的结果。 例如,
var x = "2017-07-10T18:30:00.000Z"
var y = "2017-07-10T18:35:00.000Z"
var z = "2017-07-10T18:45:00.000Z"
并尝试将它们转换为使用moment.tz:
moment.tz(x, 'America/New_York').format('DD/MM/YYYY HH:MM:SS');
moment.tz(y, 'America/New_York').format('DD/MM/YYYY HH:MM:SS')
moment.tz(z, 'America/New_York').format('DD/MM/YYYY HH:MM:SS')
令我惊讶的是,所有3个"10/07/2017 14:07:00"
的结果都相同。
出了什么问题?任何帮助将不胜感激。
答案 0 :(得分:2)
简答:
问题是您在format()
使用大写MM
(月)而不是小写mm
分钟。请注意,SS
(小数秒)和ss
(秒)存在同样的问题。
关于代码示例的一般说明:
使用moment.tz
使用给定时区解析时间字符串(例如'America/New_York'
),moment.tz
不会将输入转换为给定时区。
您必须使用tz()
方法将时刻对象转换为给定时区。
请注意,您的输入字符串以Z
结尾,因此它表示UTC时间。
正如Matt Johnson在评论中指出的那样,在您的情况下,即使moment.tz(input, zone)
也会将输入转换为给定区域,因为输入字符串包含Z
(保留为UTC时区)。无论如何,这种方法是不鼓励的。
这是一个parses UTC时间字符串并将其转换为'America/New_York'
时区的代码示例:
var x = "2017-07-10T18:30:00.000Z";
var y = "2017-07-10T18:35:00.000Z";
var z = "2017-07-10T18:45:00.000Z";
console.log( moment.utc(x).tz('America/New_York').format('DD/MM/YYYY HH:MM:SS') );
console.log( moment.utc(y).tz( 'America/New_York').format('DD/MM/YYYY HH:mm:ss') );
console.log( moment.utc(z).tz( 'America/New_York').format('DD/MM/YYYY HH:mm:ss') );

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.13/moment-timezone-with-data-2012-2022.min.js"></script>
&#13;