如果日期字符串的格式为dd.mm.
而没有年份,那么获得最合理(最接近今天)dd.mm.yyyy
字符串的最佳方法是什么?
示例:
nDate('06.06.') === '06.06.2014'
//' 06.06.2014'更接近于2014年3月14日'然后' 06.06.2013'
nDate('10.12.') === '10.12.2013'
//' 10.12.2013'更接近于2014年3月14日'那么' 10.12。' 2014'
我目前的代码:
function nDate($date) {
$tmpDate = DateTime::createFromFormat('d.m.Y', $date . date('Y', strtotime('-1 year')));
foreach ($years as $year) {
$tmpDate2 = DateTime::createFromFormat('d.m.Y', $date . $year);
if ($tmpDate2 instanceof DateTime && (!($tmpDate instanceof DateTime) || abs($tmpDate2->getTimeStamp() - time()) < abs($tmpDate->getTimeStamp() - time()))) {
$tmpDate = $tmpDate2;
}
}
}
答案 0 :(得分:-1)
您可以使用strtotime
功能执行此操作。
修改强>
可能是这样的:
<?php
/**
* @param string $srcDate format mm-dd
*/
function closestDate($srcDate) {
$dates['prev'] = (date('Y') - 1) . '-' . $srcDate;
$dates['curr'] = date('Y') . '-' . $srcDate;
$dates['next'] = (date('Y') + 1) . '-' . $srcDate;
$times = array_map('strtotime', $dates);
$diffs = array_map(function($time) {
return abs($time - strtotime('today'));
}, $times);
$minDiff = min($diffs);
$key = array_keys($diffs, $minDiff);
return $dates[$key[0]];
}
echo closestDate('06-06'); //2014-06-06
echo closestDate('12-10'); //2013-12-10