【问题标题】:Moment JS ("Must to show days in next week")Moment JS(“必须显示下周的天数”)
【发布时间】:2020-07-15 18:38:37
【问题描述】:

我正在开发一个气象服务,我需要编写一个代码来显示下周的天气预报。在服务器上,我只有一个“时间”实体,其“价值”为下周一,如“2020-04-06T00:00:00.000+02:00”。

{
    "message": "Show me the weather for next week",
    "entities": [
        {
            "value": "weather",
            "text": "weather",
            "entity": "radio_tag"
        },
        {
            "value": "play_next",
            "text": "next",
            "entity": "media_control"
        },
        {
            "value": "next",
            "text": "next",
            "entity": "next"
        },
        {
            "value": {
                "values": [
                    {
                        "value": "2020-04-06T00:00:00.000+02:00",
                        "grain": "week",
                        "type": "value"
                    }
                ],
                "value": "2020-04-06T00:00:00.000+02:00",
                "grain": "week",
                "type": "value"
            },
            "entity": "time"
        },
        {
            "value": "weather_condition",
            "entity": "sub_intent"
        }
    ],
    "intent": "weather_condition",
    "user_id": "5258",
    "language_id": "56",
    "driver": "gigaaa",
    "abort": "0",
    "extras": {
        "coordinates": {
            "lat": "44.4150804",
            "lng": "19.1290729"
        }
    },
    "conversation_messages_count": "1"
}

例如,如果今天是星期二,我必须显示下周的星期一和星期二,如果今天是星期六 (04.04),我必须显示下周从星期一 (06.04) 到星期六 (11.04) 的每一天。我是初学者,为此我必须使用 Moment JS。

我试过这个条件if (this.conversation.payload.grain === 'week' && moment().startOf('isoWeek').isSame(this.conversation.payload.forecastTime)) 但条件的第二部分不正确。

【问题讨论】:

  • 您的要求并没有多大意义:为什么如果是周二,您只返回周一+下周的周二,但如果是周六,您希望提前整整一周?
  • 我们使用的 API 最多支持显示 7 天。所以我说如果今天是星期五,那么到本周末我们还有 2 天。因此,下周将显示另外 5 天,即从周一到周五。我不需要显示这周的天数,只显示下周的天数。明白了吗?
  • 不过,这并不能解释您希望仅在今天是星期二时才显示下周星期一和星期二的逻辑。
  • 见。例如,如果今天是星期二 (31.03),那么接下来的 7 天是:(01.04)、(02.04)、(03.04)、(04.04)、(05.04)、(06.04)、(07.04)。由于(06.04),(07.04)是下周,我只需要给他们看。你现在明白我了吗?

标签: javascript node.js json typescript momentjs


【解决方案1】:

我们获取当前日期并检查我们是否与数据不在同一个等周,以便从当前周中过滤掉数据行。然后,我们获取当前日期并添加一周,以便我们可以检查是否已过去

var valueFromData = this.conversation.payload.value;
var dateFromData = moment(valueFromData).startOf('day');
var oneWeek = moment().add(7,'d').startOf('day');
if(moment().startOf('isoweek').isBefore(dateFromData)
   && dateFromData.isBefore(oneWeek))

【讨论】:

  • 但是我不能硬编码这个“时刻('2020-04-10T00:00:00.000+02:00')”。两三周后会发生什么?了解我吗?
  • 因此,您将使用数据中的变量:this.conversation.payload.value。其余时间以当前时间为准。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2018-02-21
  • 1970-01-01
相关资源
最近更新 更多