簡體   English   中英

如何使用 moment.js 和 ES6 創建小時 + 分鍾數組?

[英]How to create an hours + minutes array with moment.js and ES6?

我正在嘗試使用 moment.js 和 ES6 在一天中以 30 分鍾的間隔創建一個小時數組。

示例: let hours = ["12:00 AM", "12:30 AM", "1:00 AM", "1:30 AM", ..., "11:30 PM"]

我已經有了這個for

someFunction () {
  const items = []
  for (let hour = 0; hour < 24; hour++) {
    items.push(moment({ hour }).format('h:mm A'))
    items.push(moment({ hour, minute: 30 }).format('h:mm A'))
  }
  return items
}

但我想讓它更像 ES6。

我已經走到這一步了:

someFunction () {
  let timeSlots = new Array(24).fill().map((acc, index) => {
    let items = []
    items.push(moment( index ).format('h:mm A'))
    items.push(moment({ index, minute: 30 }).format('h:mm A'))
  })
  return timeSlots
}

但它輸出:

["1:00 AM", "12:30 AM", "1:00 AM", "12:30 AM", "1:00 AM", "12:30 AM", "1:00 AM", "12:30 AM", "1:00 AM", "12:30 AM", "1:00 AM", "12:30 AM", ...]

function someFunction () {
  const items = [];
  new Array(24).fill().forEach((acc, index) => {
    items.push(moment( {hour: index} ).format('h:mm A'));
    items.push(moment({ hour: index, minute: 30 }).format('h:mm A'));
  })
  return items;
}

您可以使用array#fromarray#reduce來生成 30 分鍾的間隔時間。

 let someFunction = () => { return Array.from({length: 24}, (_,i) => i).reduce((r,hour) => { r.push(moment({hour, minute: 0}).format('h:mm A')); r.push(moment({hour, minute: 30}).format('h:mm A')); return r; }, []); } console.log(someFunction());
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

這是工作代碼:

someFunction = () => {
  var items = []
  var currentDate = moment('12');
  new Array(48).fill().map((acc, index) => {
    items.push(currentDate.format('h:mm A'))
    currenDate = currentDate.add(30, 'minutes');
  })
  return items
}

console.log(someFunction());

工作小提琴:http: //jsfiddle.net/ekqxhwf4/1/

您可以使用Array.from方法生成二維數組,然后使用擴展語法concat以創建一維數組。

 function create () { return [].concat(...Array.from(Array(24), (_, hour) => ([ moment({hour}).format('h:mm A'), moment({ hour, minute: 30 }).format('h:mm A') ]))) } console.log(create())
 <script src="http://momentjs.com/downloads/moment.js"></script>

我知道momentJS是必需的,但也可以用普通的JavaScript Date 對象輕松解決:

 function everyXMilliseconds(x) { if (x === void 0) { x = 86400000; } var base = new Date(86400000); var currentDate = new Date(86400000); var dates = []; while (currentDate.getUTCDate() === base.getUTCDate()) { dates.push(new Date(currentDate.getTime())); currentDate.setTime(currentDate.getTime() + x); } return dates; } function everyXSeconds(x) { if (x === void 0) { x = 86400; } return everyXMilliseconds(x * 1000); } function everyXMinutes(x) { if (x === void 0) { x = 1440; } return everyXSeconds(x * 60); } function everyXHours(x) { if (x === void 0) { x = 24; } return everyXMinutes(x * 60); } //Offsets date with its own timezone difference function toLocalTime(date) { date.setUTCHours(date.getUTCHours() + date.getTimezoneOffset() / 60); return date; } //TEST //get dates var dates = everyXHours(0.5); // dates to time console.log('UTC times', dates.map(function(d) { return d.toLocaleTimeString("uk"); })); // dates to time localized console.log('Local times', dates.map(toLocalTime).map(function(d) { return d.toLocaleTimeString("uk"); }));

我上面的代碼片段有點過於復雜,但它說明了您可以創建真正靈活的系統而無需導入庫。

您可以通過標簽獲得價值。

function someFunction () {
  const items = [];
  new Array(24).fill().forEach((acc, index) => {
    items.push({"value": moment( {hour: index} ).format('HH:mm'), "label": moment( {hour: index} ).format('h:mm A')});
    items.push({"value": moment({ hour: index, minute: 30 }).format('HH:mm'), "label": moment({ hour: index, minute: 30 }).format('h:mm A')});
  })
  return items;
}

一個更短的版本是:

const someFunction = () => 
  Array(48)
    .fill()
    .map((_, index) =>
      moment({
        hour: Math.floor(0.5 * index),
        minute: 30 * (index % 2)
      })
      .format("h:mm A"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM