这可能是一个奇怪的问题,但是我有一个约会,稍后我将需要抓住其中的一部分以用于不同的用途。例如,我抢了一天,从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
,但我想在纽约时区(即{{1 }},如果要获取日期,也将是前一天。
我想一种解决方法是使用21
将其转换为日期对象,然后手动设置每个对象?像这样:
new Date
但这听起来有些混乱,我想知道是否有更好的方法来完成此操作,也许是一时之间。
那么,有没有办法让我在适当的时区时间内获取矩对象的一部分?
答案 0 :(得分:1)
我相信您正在寻找的是:
var m = moment("2018-12-31 02:00:00.000 +00:00","YYYY-MM-DD HH:mm:ss.SSS Z")
.tz('America/New_York');
m.hours() //=> 21
几件事:
请注意,提供的输入格式区分大小写,并且需要匹配输入字符串。在您的问题中,您使用的是hh
而不是HH
,并且也没有提供Z
的时区偏移量。
tz
函数有两种风格。 moment.tz()
用于构造一个时刻,其中输入值为该时区。 moment().tz()
用于将时刻转换为其他时区。
尽管我在上面的示例中仅使用了moment
,但是您可以使用moment.tz
,moment.utc
或moment.parseZone
,效果是相同的,但仅因为您在输入字符串中包含了偏移量+00:00
。如果您实际上没有该偏移量,则可以使用moment.utc
,如下所示:
var m = moment.utc("2018-12-31 02:00:00.000","YYYY-MM-DD HH:mm:ss.SSS")
.tz('America/New_York');
关于您建议的解决方案,这将是创建一个代表不同时间点的Date
对象。通常,一旦使用Moment,如果可以改用Moment函数,则应避免使用Date
对象。
答案 1 :(得分:0)
<!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>