【问题标题】:Calculating time with momentjs用 momentjs 计算时间
【发布时间】:2020-04-05 01:46:46
【问题描述】:

我有start_time,它是字符串和AM/PM 格式,有一个时间间隔,现在我的想法是把 start _time 放在 while 循环中,它被添加时间间隔并一直在循环中,直到它变得大于 current_time,我想在这个时间间隔内拉出下一个当前时间。

假设

start_time  => 10:00 AM
current_time => moment()
time_interval => 15 mins

因此,如果任何用户在上午 10:05 调用此函数,那么我希望输出为上午 10:15,或者任何用户在下午 12:33 调用此函数,因此我的输出将为下午 12:45,依此类推。

为了实现这一点,我正在尝试这样的事情:

nextDrawTime() {
    let moment = require('moment');
    let now = moment();
    let set_time = moment(now.get('date') + ' ' + this.start_time).get('time');
    while(set_time > moment) {
        set_time.add(this.time_interval, 'm');
    }
    return set_time.format('LT');
}

但不知何故,这行不通。帮我解决它。谢谢。

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

    你忘记打电话了。

    while(set_time > moment())
    

    【讨论】:

    • 我无法比较时间,这就是为什么我的 while 循环不起作用,即使在你的回答中它也无法进入 while 循环。
    【解决方案2】:
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
    <script>
    function nextDrawTime() {
        let now = moment();
        start_time = '10:00 AM';
        let set_time = moment( now.format("YYYY-MM-DD") + ' ' + start_time).get('time');
    
        while( set_time < moment() ) {
            set_time.add(15, 'm');
        }
        return set_time.format('LT');
    }
    console.log(nextDrawTime());
    </script>
    

    now.get('date') 只返回 int 11 - 您需要将今天创建为一个完整的字符串然后比较,您还需要检查小于 &lt;

    【讨论】:

      【解决方案3】:

      在这种情况下,使用 Unix 时间戳会更有效。

      var interval = 15 * 60; // interval in seconds = 15 minutes
      
      var next15 = moment(((Math.floor(moment().unix() / interval) * interval) + interval) * 1000)
      
      console.log(next15.format("YYYY-MM-DD HH:mm:ss"))
      

      【讨论】:

        【解决方案4】:

        function nextDrawTime(time, format = "LT", interval = 15) {
            const next = moment(time, format);
            const roundedMinute = Math.ceil(next.minute() / interval) * interval;
            return next
                .minutes(0)
                .seconds(0)
                .add(roundedMinute, "minutes")
                .format(format);
        }
        
        nextDrawTime(moment().format("LT"))
        
        console.log("10:05 AM =>", nextDrawTime("10:05 AM"));
        console.log("12:33 PM =>", nextDrawTime("12:33 PM"));
        console.log("11:59 AM =>", nextDrawTime("11:59 AM"));
        console.log("11:59 PM =>", nextDrawTime("11:59 PM"));
        &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"&gt;&lt;/script&gt;

        适用于不同的时间格式和间隔

        nextDrawTime(
            "Tuesday, December 31th 2019, 11:59:59 pm", // Time
            "dddd, MMMM Do YYYY, h:mm:ss a" // Format
            60, // Interval
        
        ) 
        // Wednesday, January 1st 2020, 12:00:00 am
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-21
          • 1970-01-01
          • 1970-01-01
          • 2023-03-12
          • 1970-01-01
          相关资源
          最近更新 更多