【发布时间】:2017-07-04 21:40:00
【问题描述】:
我存储了一串UTC日期(没有时间):
var limitDateStr = "2017-07-04T00:00:00.000Z";
还有一个以小时为单位的 TIMEZONE (based on this),而不是区域名称(如 America/Antigua)
var timezone = "-6.0"; //could be from -12.0 to 12.0
问题是:验证实际日期是否大于同一时区的limitDate。
我用 Moment.js 做什么
我使用 moment 来更改时区,但是当 y 更改偏移量时。日期也变了:
var _expirationDateUTC = moment.utc(limitDateStr).utcOffset(parseFloat(timezone)).format();
// "2017-07-03T18:00:00-06:00"
而不是2017-07-04T00:00:00-06:00
实际日期,效果很好:(天数节省除外)
var today = moment.utc().utcOffset(parseFloat(timezone)).format();
//"2017-07-04T15:32:49-06:00"
我想比较一下……也许是矩函数:
today.isAfter(_expirationDateUTC);
但到期日期现在按预期工作。
【问题讨论】:
-
“实际日期”是指“当前日期”?
-
如果您将所有内容都简化为 UTC,那么您可以忘记时区。如果时间 A 在特定时区中的时间 B 之前,则 A 在任何时区中始终在 B 之前。如果您更改时间戳的时区偏移量,它将代表不同的时间点。
-
@Bergi 是的,先生,当前日期。对不起,我的英语不太好。
-
@RobG ,BD 保留 UTC 值,但如果您需要来自智利或西班牙的信息怎么办。信息是等价的,但时间不同。这是一个促销,如果是关于国际促销,你不能限制为 UTC,因为在不同的国家不是平等的情况。 (忽略代理和类似的东西)
-
@elporfirio—“2017-07-04T00:00:00.000Z”代表一个特定的时刻。如果将偏移量移至 -0600,则等效时间戳为“2017-07-03T18:00:00.000-0600”。一个常见的策略是将所有内容保持为 UTC 并转换为仅用于显示的任何时区。因此,如果用户输入“2017-07-03T18:00:00.000-0600”(或等效项),则将其存储为“2017-07-04T00:00:00.000Z”。时区 +1000 的用户会将其视为“2017-07-04T10:00:00.000+1000”。它们都是完全相同的时刻。
标签: javascript date momentjs