如何从仅包含月份和年份的日期数组中获取最小值和最大值?

时间:2019-10-31 14:58:33

标签: php date

我有一个仅包含月份和年份的日期数组。我想从中获取最小和最大日期。

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

2 个答案:

答案 0 :(得分:0)

您应该使用DateTime method

转换DateTime::createFromFormat对象中的所有字符串
$dates = array_map(function($date){
  return DateTime::createFromFormat('m-Y',$date);
}, $dates);

然后使用sort函数对其进行排序

sort($dates);

答案 1 :(得分:0)

使用usort。 usort需要一个比较函数。只有月年的字符串不能用strtotime解析。使用Day(我使用简单的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