首页 > 解决方案 > 用时刻在不同时区抓取日期的一部分

问题描述

这可能是一个奇怪的问题,但我有一个时刻日期,稍后我需要抓取其中的一部分以用于不同的用途。例如,我抓住这一天并显示date.date()moment.

所有这些都是发现和花花公子,但问题是时区与此相关。所以我有我的时刻对象,它是从字符串创建的:

const properDate = moment.tz(date, 'YYYY-MM-DD hh:mm:ss.SSS', 'America/New_York')

据我了解,为了获得正确的时区时间,我会这样做

properDate.format()

但这会将其转换为字符串。我希望能够获取正确时区的时间和日期。所以基本上,当我这样做时,properDate.hours()我会在 UTC 时间得到它,但我想要它在America/New_York.

比如说我想输入的日期字符串是2018-12-31 02:00:00.000 +00:00

当我通过上面的代码运行它时,然后properDate.hours()我会得到2,但我想在纽约时区得到它,21如果我想得到日期,它也将是前一天。

我想解决这个问题的一种方法是将其转换为日期对象,使用new Date并手动设置每个对象,也许?像这样的东西:

const dateWithTimezoneObject = new Date(properDate.year(), properDate.month(), properDate.date(), properDate.hours(), properDate.minutes())

但这听起来有点乱,我想知道是否有更好的方法来完成这项工作,可能是通过时刻。

那么,有没有办法让我在正确的时区时间获得时刻对象的部分?

标签: javascriptdatedatetimemomentjs

解决方案


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
</head>
<body>
  Test
  <script src="moment.js"></script>
  <script src="moment-timezone-with-data.js"></script>
  <script>
    const date = '2018-12-31 02:00:00.000 +00:00' 
    const new_york = moment(date,'YYYY-MM-DD HH:mm:ss.SSS Z')
      .tz('America/New_York')
    document.body.textContent = 
      `day: ${new_york.dates()} hour: ${new_york.hours()}`
  </script>
  </body>
</html>

https://momentjs.com/timezone/


推荐阅读