时间字 - 从一个日期到另一个日期

时间:2011-04-29 00:13:10

标签: php date

重写为更清晰

我有一个有几个展览的网站。一个展览可以跨越数天,有时甚至数月。从这个意义上说,它也可以跨越多年(尽管只有它在前一年开始并在今年结束,如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

}

由于

3 个答案:

答案 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;
    }

}