有一种方法可以解析和比较weather.gov日期格式和Javascript吗?

时间:2018-04-27 13:09:27

标签: javascript momentjs

我正在开发的应用程序依赖于来自weather.gov API的预测数据。对于每个位置,都有一个不同的端点。数据模式非常标准,如下所示:

  

https://api.weather.gov/gridpoints/EAX/41,43

所有属性(温度,风速,风向等)都有一个值列表,每个值都包含给定时间段。这段时间的格式是这样的:

2018-04-27T04:00:00+00:00/PT1H

我猜,这意味着从2018年4月4日凌晨4点(UTC)起1小时。

如果我想获得当前温度,我会这样:

const now = new Date();
let currentTemperature;
data.properties.temperature.values.forEach((value) => {
    if (now in value.validTime) {
        currentTemperature = value;
    }
});

now in value.validTime只是一个伪条件。我知道不会以预期的方式工作。我只想找到一种方法来检查now是否在该时间间隔内。

我在another question找到了:

  

时刻会使用moment.duration方法解析开箱即用的ISO格式的持续时间。

我想我可以通过两种方式打破API提供的日期,这样:

const [ start, duration ] = value.validTime.split('/');

然后使用时刻函数解析持续时间。然而,经过一些研究,我无法找到如何直接使用持续时间对象来执行我需要的检查。

实际上,我想出了一种方法:

const now = moment();
const [ start, duration ] = value.validTime.split('/');
const diff = moment(start).diff(now);
if (moment.duration(duration).asMilliseconds() > diff) {
    // The current time (now) is in this interval.
}

但对于看起来更简单的解决方案来说似乎太过分了。

最后,我不一定要找到基于moment的解决方案。我可以使用不同的lib甚至简单的JS。

1 个答案:

答案 0 :(得分:4)

您只需使用isBetween

即可
  

检查片刻是否在两个其他时刻之间,可选择查看单位比例(分钟,小时,天等)。比赛是独家的。前两个参数将被解析为片刻,如果不是这样的话。

add(Duration)

您的代码可能如下所示:

const now = moment();
const [ start, duration ] = value.validTime.split('/');
const dur = moment.duration(duration);
const end = moment(start).add(dur);
if ( now.isBetween(start, end) ) {
    // The current time (now) is in this interval.
}