如何将两个日期时间分成一个范围?

时间:2015-03-18 09:45:24

标签: php datetime

我想知道如何将MySQL中的两个datetime分成一个范围。我正在创建事件系统,我需要从用户输入设置范围。

输入:

date from: 2015-03-05
date to: 2015-03-07

我想从这两个变量得到这个:

输出:

Mar 5–7, 2015

如果月份和年份不同

Diff. month: Mar 31 – Apr 2, 2015
Diff. year: Dec 31 2014 – Jan 2, 2015

2 个答案:

答案 0 :(得分:0)

这是一个解决方案。你可以减少一些代码。

<?php 
    $dateFrom ="2014-03-05";
    $dateTo   ="2015-04-07";

    $part1= '';
    $part2= '';

    if(date('M',strtotime($dateFrom)) == date('M' ,strtotime($dateTo))){
        $part1= date('M',strtotime($dateFrom)).' '.date('j',strtotime($dateFrom));
        $part2= date('j',strtotime($dateTo));
    } else {
        $part1= date('M',strtotime($dateFrom)).' '.date('j',strtotime($dateFrom));
        $part2= date('M',strtotime($dateTo)).' '.date('j',strtotime($dateFrom));
    }
    $stringFinal = $part1.' - '.$part2.', ';

    if(date('Y',strtotime($dateFrom)) == date('Y' ,strtotime($dateTo))){
        $stringFinal = $part1.' - '.$part2.', '.' '.date('Y',strtotime($dateFrom));

    } else {
        $stringFinal = $part1.' '.date('Y',strtotime($dateFrom)).' - '.$part2.', '.' '.date('Y',strtotime($dateTo));
    }

    echo $stringFinal;

?>

答案 1 :(得分:0)

使用DateTime类并将所有内容移动到函数中,可以实现更优雅的解决方案。类似的东西: -

/**
 * @param string $from
 * @param string $to
 * @return string
 */
function dateDiffString($from, $to)
{
    $fromDate = new \DateTime($from);
    $toDate = new \DateTime($to);
    if($fromDate->format('Y') !== $toDate->format('Y')){
        return $fromDate->format('M d Y') . " - " . $toDate->format('M d Y');
    }
    if($fromDate->format('m') !== $toDate->format('m')){
        return $fromDate->format('M d') . ' - ' . $toDate->format('M d, Y');
    }
    return $fromDate->format('M d') . ' - ' . $toDate->format('d, Y');
}

Here is a working example使用您的示例输入。