Как я могу найти ближайшее значение даты из массива в соответствии с текущей датой? - PullRequest
0 голосов
/ 30 июня 2018

Я хочу получить следующую ближайшую дату в этом массиве в соответствии с текущей датой.

var dates = [
    'Aug 18, 2018 03:24:00',
    'August 19, 2018 03:24:00',
    'September 17, 2018 03:24:00',
    'September 14, 2018 03:24:00',
    'August 18, 2018 03:24:00',
    'July 16, 2018 03:24:00',
    'July 15, 2018 03:24:00',
    'December 15, 2018 03:24:00',
    'July 13, 2018 03:24:00',
];

    var now = new Date();

Ответы [ 4 ]

0 голосов
/ 30 июня 2018

Вы можете отсортировать массив dates по абсолютной разнице между текущей датой и извлечь первый элемент:

var dates = [
    'Aug 18, 2018 03:24:00',
    'August 19, 2018 03:24:00',
    'September 17, 2018 03:24:00',
    'September 14, 2018 03:24:00',
    'August 18, 2018 03:24:00',
    'July 16, 2018 03:24:00',
    'July 15, 2018 03:24:00',
    'December 15, 2018 03:24:00',
    'July 13, 2018 03:24:00',
];

var now = new Date();

var [ closest ] = dates.sort((a,b) => {

  const [aDate, bDate] = [a,b].map(d => Math.abs(new Date(d) - now));

  return aDate - bDate;

});

console.log(closest);
0 голосов
/ 30 июня 2018

Подробнее см. Array.prototype.reduce().

// Input.
const dates = ['July 16, 1995 03:24:00','Aug 18, 1995 03:24:00','August 19, 1995 03:24:00','September 17, 1995 03:24:00','September 14, 1995 03:24:00','August 18, 1995 03:24:00','July 16, 1995 03:24:00','December 15, 1995 03:24:00','July 13, 1995 03:24:00']

// Closest Date.
const closestDate = dates => dates.reduce((x, date) => {
  const distance = Math.abs(Date.now() - new Date(date))
  if (!x.distance || distance < x.distance) return {distance, date}
  return x
}, {}).date

// Output + Proof.
const output = closestDate(dates)
console.log(output)
0 голосов
/ 30 июня 2018

Вы можете использовать библиотеку moment.js , чтобы конвертировать даты в любой формат. Вы можете достичь этого просто путем сопоставления по вашему массиву и с помощью
момент ( yourDate ). формат ( ваш формат ).

Вот небольшая функция, которая может вам помочь:
Имеет 2 параметра ->

  • a) даты -> которые представляют собой ваш массив дат &&
  • b) target - это значение, с которым вы сравниваете его.

.

const dates = [
                '1980-7-12',
                '2001-1-5',
                '2018-4-12',
                '1999-3-25'
            ];   

    const nearestDate = (dates, target) => {
          if (!target

) target = Date.now()
      else if (target instanceof Date) target = target.getTime()

      let nearest = Infinity
      let winner = -1

      dates.forEach(function (date, index) {
        if (date instanceof Date) date = date.getTime()
        let distance = Math.abs(date - target)
        if (distance < nearest) {
          nearest = distance
          winner = index
        }
      })

      return winner
    }
0 голосов
/ 30 июня 2018

Сначала необходимо преобразовать каждую дату в метку времени, затем вычесть каждую из них на текущую дату и сохранить разницу во времени в массиве temp, затем получить индекс минимального значения и использовать индекс для доступа к ближайшей дате в исходный массив.

var dates = [
    'July 16, 1995 03:24:00',
    'Aug 18, 1995 03:24:00',
    'August 19, 1995 03:24:00',
    'September 17, 1995 03:24:00',
    'September 14, 1995 03:24:00',
    'August 18, 1995 03:24:00',
    'July 16, 1995 03:24:00',
    'December 15, 1995 03:24:00',
    'July 13, 1995 03:24:00',
]

var temp = dates.map(d => Math.abs(new Date() - new Date(d).getTime()));
var idx = temp.indexOf(Math.min(...temp));
console.log(dates[idx]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...