我想知道如何将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
答案 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使用您的示例输入。