PHP - 获取'dd.mm'输入的最近日期

时间:2014-03-14 16:55:44

标签: php

如果日期字符串的格式为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;
        }
    }
}

1 个答案:

答案 0 :(得分:-1)

  1. 在指定的月份和日期创建上一个,当前和明年的完整日期。
  2. 选择在该日期与当前日期之间差异最小的前三个中的一个。
  3. 您可以使用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