使用 momentjs 和 lodash 获取精确格式

Getting exact format with momentjs and lodash

我这里有一个时间段列表,例如:

const times = [
      { start: '2020-07-09T08:00:00.000+02:00', end: '2020-07-09T09:30:00.000+02:00' },
      { start: '2020-07-09T08:30:00.000+02:00', end: '2020-07-09T10:00:00.000+02:00' },
    ]

当我尝试使用 momentjs 和 lodash 每天对它们进行 排序 时,得到类似的东西:

{
        {startTime: '08:00', endTime: '08:30'}
        {startTime: '08:30', endTime: '09:00'}
        {startTime: '08:00', endTime: '08:30'}
        {startTime: '08:30', endTime: '09:00'}
    }

现在我最终得到了这个解决方案:

const groupedAndFormatted = groupBy(times, date => moment(date.start_time).startOf('day').format('MMM Do YY')) 

但是这个并没有真正给我正确的解决方案,有什么想法吗?

首先您需要将它们排序为正确的顺序,我们将使用排序和 unix 时间戳来执行此操作。

然后将它们与 dddd

const times = [
  { start_time: '2020-07-09T08:00:00.000+02:00', endTime: '2020-07-09T09:30:00.000+02:00' },
  { start_time: '2020-07-09T08:30:00.000+02:00', endTime: '2020-07-09T10:00:00.000+02:00' },
  { start_time: '2020-07-07T09:00:00.000+02:00', endTime: '2020-07-07T10:30:00.000+02:00' }
];

const sorted_times = times.sort((a,b) => moment(a.start_time).unix() - moment(b.start_time).unix())
const grouped = _.groupBy(sorted_times, date => moment(date.start_time).format("dddd"))

const formatted = _.mapValues(grouped, dates => {
  return dates.map(times => {
    return {
      start_time: moment(times.start_time).format("hh:mma"),
      endTime: moment(times.endTime).format("hh:mma"),
    }
  })
})

但是,如果您最终在不同的日期有多个星期二,这将不起作用。