代码之家  ›  专栏  ›  技术社区  ›  Svish

如何将两个日期合并为正常的人类可读日期范围

  •  3
  • Svish  · 技术社区  · 14 年前

    假设您有以下日期范围:

    2010-04-10 - 2010-04-15
    

    作为一个人,我可以把这个写为 April 10 - 15, 2010 或者类似的。不确定是否有一个定义正确的方法来写这样的范围,但是无论如何,如果你要做那样的事情,你会怎么做?我甚至不知道从哪里开始…

    我想这样做,以便日期范围可能更紧凑,更容易阅读,也更好看。

    2 回复  |  直到 12 年前
        1
  •  5
  •   Brent    14 年前

    我不认为有明确的方法可以做,基本上这只是逻辑。试着用一些简单的文字写下你认为规则应该是什么样的。你举的例子很好。如果他们是不同的月份呢?如果是2005年4月到2007年4月,那是2005年4月到2007年4月吗?

    一旦你有了纯文本规则,代码就变得简单了。这只是决定如何格式化它。

        2
  •  3
  •   Jim    12 年前

    这是我在项目中使用的示例代码。希望有帮助。

        $start_date = strtotime('2012-11-01');  
        $end_date = strtotime('2012-11-02');
    
    
        if ($end_date != '') {  
            $year1 = date('Y', $start_date);  
            $year2 = date('Y', $end_date);  
            $month1 = date('m', $start_date);  
            $month2 = date('m', $end_date);     
    
            if ($start_date < $end_date) {  
                if ($year1 != $year2) {  
                    $holiday_date = date('F j, Y', $start_date) . ' to ' . date('F j, Y', $end_date);  
                }  
                else {  
                    if ($month1 != $month2) {  
                              $holiday_date = date('F j', $start_date) . '&ndash;' . date('F j', $end_date) . ', '. date('Y', $end_date);  
                    }  
                    else {  
                              $holiday_date = date('F j', $start_date) . '&ndash;' . date('j', $end_date) . ', '. date('Y', $end_date);  
                    }  
                }  
            }  
            else {  
                    $holiday_date = 'Invalid date range.';  
            }  
        }  
        else {  
                $holiday_date = date('F j, Y', $start_date);  
        }    
        echo $holiday_date;