【问题标题】:Setting Date with year, month, day, hour, minute, seconds, and UTC offset values使用年、月、日、小时、分钟、秒和 UTC 偏移值设置日期
【发布时间】:2018-06-29 14:49:21
【问题描述】:

如果我有以下值:

const year = 1890
const month = 6
const day = 1
const hour = 5
const minute = 50
const second = 0
const utcOffset = -10

如何设置 Javascript 日期或 momentJS 日期 1890 年 6 月 1 日 5:50(早上),UTC 偏移量为 -10 ?

我在互联网上看到的都是一些例子 new Date(year, month, day, hours, minutes, seconds, milliseconds)。 这将默认为您的本地时区,但我想手动设置时区,例如使用 +8.5+8.5 GMT 等数字。

如何为 Date 或 Moment JS 执行此操作?

【问题讨论】:

  • 日期没有偏移,主机系统有。您不能使用 javascript 设置偏移量,您必须为此使用库。

标签: javascript date datetime time momentjs


【解决方案1】:

你可以使用时刻utcOffset

通过提供分钟来设置 UTC 偏移量。请注意,一旦设置了偏移量,它就会被固定并且不会自行更改(即没有 DST 规则)。如果您想要一个实际的时区——特定位置的时间,例如America/Los_Angeles,请考虑moment-timezone

在您的情况下,您可以将true 作为第二个参数传递,以使其保留一天中的时间:

utcOffset 函数有一个可选的第二个参数,它接受一个布尔值,指示是否保留当前时间。

  • 传递false(默认)将在世界时保持相同的时刻,但本地时间会改变。

  • 传递true 将保持相同的本地时间,但代价是选择世界时的不同时间点。

此功能的一个用途是,如果您想仅使用数字输入值来构建具有特定时区偏移的时刻

这是一个现场样本:

const year = 1890
const month = 6
const day = 1
const hour = 5
const minute = 50
const second = 0
const utcOffset = -10

let m = moment([year, month-1, day, hour, minute, second]).utcOffset(utcOffset, true)

console.log(m.format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>

记住月份是 0 索引的。

【讨论】:

  • 通过提供分钟设置 UTC 偏移量”部分推断 -10 小时的偏移量应作为 -600(分钟)传递。但是,您的示例显示 -10 被解释为小时。还有一个部分说“如果输入小于 16 且大于 -16,它会将您的输入解释为小时。”鉴于时区可能小至 15 分钟和最大偏移量是 +14:00,更好的限制可能是 15,而不是 16。
  • @RobG 文档还指出,如果输入小于16 且大于-16,它会将您的输入解释为小时。.
  • @RobG 好点!也许您可以将其发布在 moment 的 github 页面上,看看图书馆管理员是否想将限制更改为 15 而不是 16。
猜你喜欢
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2011-06-10
  • 2018-08-24
  • 1970-01-01
相关资源
最近更新 更多