【问题标题】:Moment - Angular generate array of time minus 15minMoment - Angular 生成时间数组减去 15 分钟
【发布时间】:2020-02-05 15:09:59
【问题描述】:

我有气象卫星图像开始日期2019_10_08_08_00.jpg

我正在尝试生成以下数组时隙,每个时隙之间相差 15 分钟。用于循环图像,如下所示:

[
"2019_10_08_08_00",
"2019_10_08_07_45",
"2019_10_08_07_30",
"2019_10_08_07_15",
"2019_10_08_07_00",
]

代码:

let startTime = moment('YYYY_M_DD_HH_MM');
let endTime = moment('YYYY_M_DD_HH_MM');

if( endTime.isBefore(startTime) ){
  endTime.add(1, 'day');
}

let timeStops = [];

while(startTime <= endTime){
  timeStops.push(moment(startTime).format('YYYY_M_DD_HH_MM'));
  startTime.subtract(15, 'minutes');
}

console.log(timeStops);

问题是我在控制台日志中得到空数组。

错误代码:

moment.js:293 Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.
Arguments: 
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: YYYY_M_DD_HH_MM, _f: undefined, _strict: undefined, _locale: [object Object]
Error

【问题讨论】:

  • 您必须正确初始化startTimeendTimemoment('YYYY_M_DD_HH_MM') 会产生无效日期。
  • @VincenzoC 我无法初始化,因为我会得到旧日期图像!
  • moment('2019_10_08_08_00', 'YYYY_MM_DD_HH_mm')

标签: angular momentjs angular-moment


【解决方案1】:

您使用了错误的format 字符串。 'MM' 用于月份,'mm' 用于分钟。

这里还有一个工作示例

编辑:将循环限制为 10

    const now = getRoundDate();

    const timeStops = [];

    for (let i = 0; i < 10; i++) {
      now.subtract(15, 'minutes');
      timeStops.push(now.format('YYYY_M_DD_HH_mm'));
    }

    console.log(timeStops);


    getRoundDate(): moment.Moment {
        const minutes = +moment().format('m');

        if (minutes >= 0 && minutes <= 8) return date.minutes(0);
        else if (minutes >= 9 && minutes <= 18) return date.minutes(15);
        else if (minutes >= 19 && minutes <= 38) return date.minutes(30);
        else if (minutes >= 39 && minutes <= 48) return date.minutes(45);
        else if (minutes >= 49) return date.minutes(0).add(1, 'hours')
    }

【讨论】:

  • 谢谢。我可以做限制循环吗?
  • 当然可以。当前条件是 24 小时。这意味着 timeStops 将包含从现在 + 24 小时开始的所有时间戳,但您可以根据需要更改条件。
  • 我做了,但没有改变。你能编辑吗?我的意思是只显示 10 个项目的循环限制。但我不应该提及日期,事件时间继续更新
  • 嗨,我有问题。我可以将时间四舍五入到最接近的 15 分钟吗?因为输出是[ "2019_10_9_00_00", "2019_10_9_00_14", "2019_10_9_00_21", "2019_10_9_00_18", ] ?
  • 不圆,但这里有一个小工作,查看编辑
猜你喜欢
  • 2017-08-03
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 2017-05-06
相关资源
最近更新 更多