【问题标题】:Moment handling daylight savings time时刻处理夏令时
【发布时间】:2022-07-20 15:39:23
【问题描述】:

我需要用 momentjs 管理 dst。 在 fe 我收到来自 be 的日期时间(如 2022-04-05T10:59:13.640683),我想确定我是否在 dst 中以显示正确的日期时间。 如果我在夏令时,我想添加 1 小时。

我正在这样做:

const receivedDate = moment(dateTimeFormBe).format()

moment(dateTimeFormBe).isDST() ? receivedDate.add(1,'hour') : receivedDate

它有效,但我想概括它。它仅在我在意大利时才有效,我希望它在任何地方都有效。 有人可以帮助我吗?

【问题讨论】:

  • 您永远不需要手动添加一个小时。只要时区清晰,moment/Javascript 的Date 将处理所有这些,而您无需做任何事情。您能否提供一个更清晰的示例来说明所涉及的值和预期结果?
  • 您已经在使用 Moment 时区了吗? momentjs.com/timezone
  • 另外看起来你在这里滥用三元组
  • 另外,您认为 DST 总是将时钟向前移动 1 小时的假设是错误的:en.wikipedia.org/wiki/Daylight_saving_time_by_country

标签: javascript reactjs momentjs


【解决方案1】:

如 cmets 中所述,您应该使用 momentjs timezone 来管理您的时区,只要您使用 .format() 方法就可以使用 does have DST baked in

var date = new Date();
var zone = 'Europe/Paris';
var dateZone = moment.tz(date, zone).format();
<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>

【讨论】:

    【解决方案2】:
    moment(date).add(moment().utcOffset(), 'm').format('DD-MM-YYYY -h:mm:ss');
    

    这对我来说非常好。它通过在满足 DST 的同时添加/减去 utc 偏移时间来将 utc 时间转换为本地时间

    【讨论】:

      猜你喜欢
      • 2019-12-16
      • 2013-03-18
      • 2019-03-13
      • 2019-09-29
      • 2012-11-21
      • 2015-04-09
      • 2012-11-07
      • 2017-03-17
      • 2018-04-18
      相关资源
      最近更新 更多