Как получить минимальное и максимальное значения из массивов дат только с месяцем и годом? - PullRequest
0 голосов
/ 31 октября 2019

У меня есть массив дат, содержащий только месяц и год .. Я хочу получить минимальную и максимальную дату из этого.

$dates = array('1-2018','5-2019','10-2018','5-2020');

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

используйте usort. usort нужна функция для сравнения. Строка с только месяц-год не может анализировать с strtotime. С Днем (я использую простой 1-) возвращает strtotime правильную метку времени. Эта функция для восхождения. Для сортировки по убыванию необходимо переключать только $ a и $ b. Я добавил некоторые значения в массив для лучшего теста.

<?php
$dates = array('1-2018','5-2019','10-2018','5-2020','9-1978','6-2001');

usort($dates, function($a,$b){ return strtotime('1-'.$a) <=> strtotime('1-'.$b);});

echo "<pre>".var_export($dates, true)."\n";

echo "Min: ".reset($dates)."\n";
echo "Max: ".end($dates)."\n";

Редактировать: минимум это первое значение из массива, максимум это последнее значение.

Выход:

array (
  0 => '9-1978',
  1 => '6-2001',
  2 => '1-2018',
  3 => '10-2018',
  4 => '5-2019',
  5 => '5-2020',
)
 Min: 9-1978
 Max: 5-2020

Демо: https://3v4l.org/lZocQ

0 голосов
/ 31 октября 2019

Вы должны преобразовать всю свою строку в DateTime объект с помощью DateTime::createFromFormat метода

$dates = array_map(function($date){
  return DateTime::createFromFormat('m-Y',$date);
}, $dates);

Затем отсортировать их с помощью sort function

sort($dates);
...