【问题标题】:Creating an array of times in 24/12 hour format using moment.js使用 moment.js 创建 24/12 小时格式的时间数组
【发布时间】:2020-01-23 12:17:50
【问题描述】:

我刚刚将 moment.js 添加到我的项目中,并希望创建几个选择框,每个小时和半小时都有一天中的时间。它看起来像这样:

['12:00', '12:30', '1:00', '1:30', '2:00', '2:30'...'5:00', '5:30'];

我想知道 moment.js 是否可以像生成星期几一样生成数组:

moment.weekdays();

基本上我想用这些每小时选项作为标签和 24 小时格式的值填充我的选择输入。我在这里最好的选择是什么?我会在我的循环中转换 12 小时的时间,还是有更好的选择,让 moment 可以创建一个具有两个值的对象?不管怎样,我都在听。

【问题讨论】:

  • 一般情况下:不要将选择用于日期输入!但是您是否尝试过 Array(24).fill(null).map((_,i) => i).map(h => [`${h}:00`, `${h}:30`]).flat() 之类的方法?
  • 我认为这很酷,但我认为仍然需要时刻发挥作用才能转换回 24 小时制。
  • 为什么?这是24小时。而对于 12 小时,只需使用模

标签: javascript momentjs


【解决方案1】:

您可以使用array#from 创建时间数组

const hours = Array.from({
  length: 48
}, (_, hour) => moment({
    hour: Math.floor(hour / 2),
    minutes: (hour % 2 === 0 ? 0 : 30)
  }).format('HH:mm')
);
console.log(hours);
<script src="https://rawgit.com/moment/moment/2.24.0/min/moment.min.js"></script>

【讨论】:

    【解决方案2】:

    我找到了一个更适合人类阅读的解决方案。

    const startOfDay = moment().startOf('day');
    const hours = Array(48).fill(null).map((_, i) => startOfDay.add(i ? 30 : 0, 'minutes').format('HH:mm'))
    

    【讨论】:

      【解决方案3】:

      你总是可以这样做:

      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
      <script >
        const generateHour = () => {
          const arrHours = []
          for (let h = 0; h < 48; h++) {
            arrHours.push(moment({
              hour: Math.floor(h / 2),
              minute: h % 2 === 0 ? 0 : 30
            }).format('HH:mm'))
          }
          console.log(arrHours)
       }
      generateHour()
      </script>

      【讨论】:

        猜你喜欢
        • 2012-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多