moment timezone js returns 错误的日期时间
moment timezone js returns wrong datetime
我正在使用 Moment Timezone 获取 Asia/Tokyo 时区的当前日期时间。
代码如下
var currentDateTime = new Date(moment().tz('Asia/Tokyo').format('YYYY-MM-DDTHH:mm:ss'))
假设我当地时区的当前日期时间如下
Thu Jul 22 2021 19:49:47 GMT+0700 (Indochina Time)
我预计 Asia/Tokyo 时区的当前日期如下
Thu Jul 22 2021 21:49:47 GMT+0700 (Indochina Time)
在 Chrome 中,我得到了预期的日期时间。
但是在我的 iPhone 上的 Safari 中,我得到了错误的日期时间。
Fri Jul 23 2021 04:49:47 GMT+0700 (Indochina Time)
返回的当前日期时间似乎是正确的当前日期时间加上 7 小时。
这是我的环境
iPhone : iPhone 6
iOS : 12.5.4
您遇到的问题是由 Date
构造函数根据本地时区(在 Chrome 中)和 UTC(在 Safari 中?)解析时间引起的。
对于给定的时间,此代码
moment().tz('Asia/Tokyo').format('YYYY-MM-DDTHH:mm:ss')
returns
"2021-07-22T21:49:47"
然后将这个时间传递给 Date 构造函数:
var currentDateTime = new Date("2021-07-22T21:49:47")
因为这个字符串没有时区信息,它被假定在设备的本地时区 (Chrome) 或 UTC (Safari),这给出了错误的日期对象。
虽然您可以将时区注入此字符串 (using ZZ
),但您可以使用以下方法从 moment
对象构建日期对象:
var currentDateTime = moment().tz('Asia/Tokyo').toDate()
但这实际上与
相同
var currentDateTime = new Date()
如果预期输出是以下格式的字符串:
"Thu Jul 22 2021 21:49:47 GMT+0900 (Japan Standard Time)"
最接近的是:
moment().tz('Asia/Tokyo').format('ddd MMM D YYYY, h:mm:ss a [GMT]ZZ (z)')
// Thu Jul 22 2021 21:49:47 GMT+0900 (JST)
或者,还有本地化的“月份名称、月份日期、星期几、年份、时间”格式:
moment().tz('Asia/Tokyo').format('llll (z)')
// In my locale, I get:
// Thu, Jul 22, 2021 9:49 PM (JST)
查看 Moment display format documentation 以获得更多选项。
我正在使用 Moment Timezone 获取 Asia/Tokyo 时区的当前日期时间。
代码如下
var currentDateTime = new Date(moment().tz('Asia/Tokyo').format('YYYY-MM-DDTHH:mm:ss'))
假设我当地时区的当前日期时间如下
Thu Jul 22 2021 19:49:47 GMT+0700 (Indochina Time)
我预计 Asia/Tokyo 时区的当前日期如下
Thu Jul 22 2021 21:49:47 GMT+0700 (Indochina Time)
在 Chrome 中,我得到了预期的日期时间。 但是在我的 iPhone 上的 Safari 中,我得到了错误的日期时间。
Fri Jul 23 2021 04:49:47 GMT+0700 (Indochina Time)
返回的当前日期时间似乎是正确的当前日期时间加上 7 小时。
这是我的环境
iPhone : iPhone 6
iOS : 12.5.4
您遇到的问题是由 Date
构造函数根据本地时区(在 Chrome 中)和 UTC(在 Safari 中?)解析时间引起的。
对于给定的时间,此代码
moment().tz('Asia/Tokyo').format('YYYY-MM-DDTHH:mm:ss')
returns
"2021-07-22T21:49:47"
然后将这个时间传递给 Date 构造函数:
var currentDateTime = new Date("2021-07-22T21:49:47")
因为这个字符串没有时区信息,它被假定在设备的本地时区 (Chrome) 或 UTC (Safari),这给出了错误的日期对象。
虽然您可以将时区注入此字符串 (using ZZ
),但您可以使用以下方法从 moment
对象构建日期对象:
var currentDateTime = moment().tz('Asia/Tokyo').toDate()
但这实际上与
相同var currentDateTime = new Date()
如果预期输出是以下格式的字符串:
"Thu Jul 22 2021 21:49:47 GMT+0900 (Japan Standard Time)"
最接近的是:
moment().tz('Asia/Tokyo').format('ddd MMM D YYYY, h:mm:ss a [GMT]ZZ (z)')
// Thu Jul 22 2021 21:49:47 GMT+0900 (JST)
或者,还有本地化的“月份名称、月份日期、星期几、年份、时间”格式:
moment().tz('Asia/Tokyo').format('llll (z)')
// In my locale, I get:
// Thu, Jul 22, 2021 9:49 PM (JST)
查看 Moment display format documentation 以获得更多选项。