首页 > 解决方案 > 比较 JavaScript 对象数组中的 localeTimeString

问题描述

我正在检查当前时间是否介于时间数组之间。预期的结果是返回更接近当前时间的第一个时间。

const dateTimes = [{
    value: '3:00:00 PM'
  },
  {
    value: '4:00:00 PM'
  },
  {
    value: '5:00:00 PM'
  }
]

const currentTime = new Date().toLocaleTimeString();

const result = dateTimes.find(({
  value
}) => currentTime > value)

console.log(result);

标签: javascript

解决方案


这种方法取当前时间和对象时间之间的绝对差。

const dateTimes = [
      {value: '3:00:00 PM'},
      {value: '4:00:00 PM'},
      {value: '5:00:00 PM'}
    ];

let currentTime = new Date().toLocaleTimeString();
let currentHour = parseInt(currentTime.split(":")[0]);
let currentMinutes = parseInt(currentTime.split(":")[1]);
let currentSeconds = parseInt(currentTime.split(":")[2]);

let dif = -1, closest = "";
dateTimes.forEach(function (e){
  let hour = parseInt(e.value.split(":")[0]);
  let minutes = parseInt(e.value.split(":")[1]);
  let seconds = parseInt(e.value.split(":")[2].split(" ")[0]);
  let stamp = e.value.split(":")[2].split(" ")[1];
  
  hour = stamp == "PM" ? hour + 12 : hour;
  let thisDif = Math.abs(hour * 3600 + minutes * 60 + seconds - (currentHour * 3600 + currentMinutes * 60 + currentSeconds));
  
  if (dif < 0 || thisDif < dif) {
    dif = thisDif;
    closest = e.value;
  }
});

console.log(closest);

    


推荐阅读