【发布时间】:2019-10-05 16:21:18
【问题描述】:
我有一个特殊的用例,应用程序总是必须使用America/Chicago 时区的时间。所以我将 Moment 默认时区设置为moment.tz.setDefault("America/Chicago");。
通过此设置,我将所有日期时间输入从客户端以America/Chicago 时区以js 格式MM/DD/YYYY h:mm A 发送到服务器。并且每当客户端请求时间字段时,服务器都会以America/Chicago时区和相同的格式返回时间。
现在有一种情况,我必须解析服务器返回的这个日期时间值,并将其与当前的America/Chicago 时间进行比较。我试过了,
moment.tz.setDefault("America/Chicago");
let now = moment();
// serverResponse is America/Chicago datetime string in format MM/DD/YYYY h:mm A
let serverResponseMoment = moment(serverResponse);
// The above statement is where I am facing issue. Since the users could be from
// anywhere, moment(serverResponse) will be assuming the serverResponse string to
// be of the local timezone as there is no offset part attached to the string.
return now.isBefore(serverResponseMoment);
也试过了
let serverResponseMoment = moment.tz(serverResponse,"America/Chicago");
// The above statement assumes the serverResponse to be in UTC and give me an "America/Chicago"
// date-time after conversion
我也试过moment.utc(serverResponse)。执行最后一次条件检查时,所有解析都失败。
我想要的是一个时刻实例,在已经设置的默认时区中,将我的 serverResponse 作为基础日期时间。
或一些这样做的语句
Hey Moment, serverResponse is already in "America/Chicago" timezone, you don't have to make any sort of timezone assumptions. Just parse it and return an instance of yourself
有什么想法吗?
谢谢
【问题讨论】:
-
moment.js的哪个版本?你用moment-timezone.js吗? -
@fen1x 我正在使用 "moment-timezone": "^0.5.21" 安装了 moment 2.24 作为依赖项
标签: javascript momentjs moment-timezone