php 从日期数组中获取最近的日期
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11012891/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Get most recent date from an array of dates
提问by sugarFornaciari
I have the array of dates below
我有下面的日期数组
array(5) {
[0]=> string(19) "2012-06-11 08:30:49"
[1]=> string(19) "2012-06-07 08:03:54"
[2]=> string(19) "2012-05-26 23:04:04"
[3]=> string(19) "2012-05-27 08:30:00"
[4]=> string(19) "2012-06-08 08:30:55"
}
and would like to know the most recent dateas in: the closest to today's date.
并想知道最近的日期,例如:最接近今天的日期。
How can I do that?
我怎样才能做到这一点?
回答by flowfree
Use max(), array_map(), and strtotime().
使用max(),array_map()和strtotime()。
$max = max(array_map('strtotime', $arr));
echo date('Y-m-j H:i:s', $max); // 2012-06-11 08:30:49
回答by PEM
Do a loop, convert the values to date, and store the most recent, in a var.
执行循环,将值转换为日期,并将最新的值存储在 var 中。
$mostRecent= 0;
foreach($dates as $date){
$curDate = strtotime($date);
if ($curDate > $mostRecent) {
$mostRecent = $curDate;
}
}
something like that... you get the idea If you want most recent BEFORE today :
类似的东西......你明白了如果你想要今天之前的最新版本:
$mostRecent= 0;
$now = time();
foreach($dates as $date){
$curDate = strtotime($date);
if ($curDate > $mostRecent && $curDate < $now) {
$mostRecent = $curDate;
}
}
回答by FThompson
Sort the array by date, and then get the front value of the array.
按日期对数组进行排序,然后获取数组的前值。
$dates = array(5) { /** omitted to keep code compact */ }
$dates = array_combine($dates, array_map('strtotime', $dates));
arsort($dates);
echo $dates[0];
回答by sumeet
$dates = [
"2012-06-11 08:30:49"
,"2012-06-07 08:03:54"
,"2012-05-26 23:04:04"
,"2012-05-27 08:30:00"
,"2012-06-08 08:30:55"
];
echo date("Y-m-d g:i:s",max(array_map('strtotime',$dates)));
回答by AlexeyKa
Thats my variant. It works with date in future.
那是我的变种。它适用于未来的日期。
$Dates = array(
"2012-06-11 08:30:49",
"2012-06-07 08:03:54",
"2012-05-26 23:04:04",
"2012-05-27 08:30:00",
"2012-06-08 08:30:55",
"2012-06-12 07:45:45"
);
$CloseDate = array();
$TimeNow = time();
foreach ($Dates as $Date) {
$DateToCompare = strtotime($Date);
$Diff = $TimeNow - $DateToCompare;
if ($Diff < 0) $Diff *= -1;
if (count($CloseDate) == 0) {
$CloseDate['Date'] = $Date;
$CloseDate['Diff'] = $Diff;
continue;
}
if ($Diff < $CloseDate['Diff']) {
$CloseDate['Date'] = $Date;
$CloseDate['Diff'] = $Diff;
}
}
var_dump($CloseDate);
回答by FatalError
I believe, following is the shortest code to find the recent date. you can alter it to find the index of the recent date or to find the recent in future or past.
我相信,以下是查找最近日期的最短代码。您可以更改它以查找最近日期的索引或查找将来或过去的最近日期。
$Dates = array(
"2012-06-11 08:30:49",
"2012-06-07 08:03:54",
"2012-05-26 23:04:04",
"2012-05-27 08:30:00",
"2012-06-08 08:30:55",
"2012-06-22 07:45:45"
);
$close_date = current($Dates);
foreach($Dates as $date)
if( abs(strtotime('now') - strtotime($date)) < abs(strtotime('now') - strtotime($close_date)))
$close_date = $date;
echo $close_date;
回答by Rafael Harus
Try this:
尝试这个:
public function getLargerDate(array $datas) {
$newDates = array();
foreach($datas as $data){
$newDates[strtotime($data)] = $data;
}
return $newDates[max(array_keys($newDates))];
}
回答by vinculis
Here is my suggestion:
这是我的建议:
$most_recent = 0;
foreach($array as $key => $date){
if( strtotime($date) < strtotime('now') && strtotime($date) > strtotime($array[$most_recent]) ){
$most_recent = $key;
}
}
print $array[$most_recent]; //prints most recent day
回答by Miqdad Ali
$arrayy = array(
"2012-06-11 08:30:49","2012-06-07 08:03:54","2012-05-26 23:04:04",
"2012-05-27 08:30:00","2012-06-08 08:30:55"
);
function getMostRecent($array){
$current = date("Y-m-d h:i:s");
$diff1 = NULL;
$recent = NULL;
foreach($array as $date){
if($diff = strcmp($current,$date)){
if($diff1 == NULL){
$diff1 = $diff;
$recent = $date;
}
else{
if($diff < $diff1){
$diff1 = $diff;
$recent = $date;
}
}
}
}
return $recent;
}
回答by Anwar Hussain
Try this works 100%
试试这个工作 100%
function getRecentDate($date_list,$curDate){
$curDate = strtotime($curDate);
$mostRecent = array();
foreach($date_list as $date){
$diff = strtotime($date)-$curDate;
if($diff>0){
$mostRecent[$diff] = $date;
}
}
if(!empty($mostRecent)){
ksort($mostRecent);
$mostRecent_key = key($mostRecent);
if($mostRecent_key){
return $mostRecent[$mostRecent_key];
}
}else{
return false;
}
}
$date_list = array('15-05-2015','14-01-2015','18-03-2015','20-10-2016','12-12-2014','12-12-2015');
$curDate = '14-01-2015';
$get_recent = getRecentDate($date_list,$curDate);
if($get_recent){
echo $get_recent;
}else{
echo 'No recent date exists';
}

