我有一个有几个展览的网站。一个展览可以跨越数天,有时甚至数月。从这个意义上说,它也可以跨越多年(尽管只有它在前一年开始并在今年结束,如2010年12月25日至2011年1月5日)
我需要的是一个功能,它将采用两个日期,并以人类可读的格式显示,其中最少量的信息需要解释。
因此,鉴于2010年5月18日至2010年5月19日的日期,这应显示为: 2010年5月18日至19日。 请注意,第一个日期已省略月份和年份,因为它们与最终日期相同。
2011年4月16日至2011年5月15日= 2011年4月16日至5月15日 请注意,省略了年份,原因与上述相同。
2008年3月8日至2009年3月8日= 2008年3月8日至2009年3月8日 请注意,这里没有变化,因为我们需要在不同的年份展示它们。
=============================================== ==============
它只需要智能地帮助隐藏可以通过阅读风格推断出的日期部分。
Psuedo的功能:
timewordDateFromTo(date1, date2, 'd M Y'){
$showYear = $showMonth = true;
if(year(date1)==year(date2))
{
$showYear = false
if(month(date1)==month(date2)) $showMonth = false
}
//do something else here
}
由于
答案 0 :(得分:4)
function timewordDateFromTo($date1, $date2, $format)
{
$string = false;
if($date2 > $date1)
{
$string = date($format,$date1) . ' to ' . date($format,$date2);
}
elseif($date2 < $date1)
{
$string = date($format,$date2) . ' to ' . date($format,$date1);
}
return $string;
}
//Assuming two well formed date strings
function timewordDateFromTo($date1, $date2, $format)
{
$string = false;
$date1 = strtotime($date1);
$date2 = strtotime($date2);
if($date2 > $date1)
{
$string = date($format,$date1) . ' to ' . date($format,$date2);
}
elseif($date2 < $date1)
{
$string = date($format,$date2) . ' to ' . date($format,$date1);
}
return $string;
}
答案 1 :(得分:1)
好的,让我们看看,更容易采取两个时间戳,但无论如何:
//Assuming two timestamps
function timewordDateFromTo($date1, $date2, $format)
{
$string = false;
if($date2 > $date1)
{
$string = date($format,$date1) . ' to ' . date($format,$date2);
}
elseif($date2 < $date1)
{
$string = date($format,$date2) . ' to ' . date($format,$date1);
}
return $string;
}
//Assuming two well formed date strings
function timewordDateFromTo($date1, $date2, $format)
{
$string = false;
$date1 = strtotime($date1);
$date2 = strtotime($date2);
if($date2 > $date1)
{
$string = date($format,$date1) . ' to ' . date($format,$date2);
}
elseif($date2 < $date1)
{
$string = date($format,$date2) . ' to ' . date($format,$date1);
}
return $string;
}
当然,您可能需要一些额外的输入错误检查,但这是它的基本框架。
答案 2 :(得分:1)
好吧这应该有用,正如另一个人所说,你需要添加一些错误检查。我假设您将日期“2011年4月15日”和“2011年5月18日”作为输入。代码可以使用一些清理。
function sentenceFromDates($date1, $date2){
$string=false;
$date1= strtotime($date1);
$date2= strtotime($date2);
//first check for years
$year1= date('Y', $date1);
$year2= date('Y', $date2);
$month1= date('n', $date1);
$month2= date('n', $date2);
//Different years, no change
if($year2 > $year1)
{
$string= date('jS M Y', $date1) . ' to ' . date('jS M Y', $date2);
return $string;
}
//Same year and month
elseif($month1 == $month2)
{
// 15th to 20th May 2011
$string= date('jS', $date1) . ' to ' . date('jS M Y', $date2);
return $string;
}
//Same year different month
else
{
$string= date('jS M', $date1) . ' to ' . date('jS M Y', $date2);
return $string;
}
}