如何将两个日期合并成一个常规的人类可读日期范围

3

假设你有以下日期范围:

2010-04-10 - 2010-04-15

作为人类,我可能会写成2010年4月10日至15日之类的形式。不确定是否有定义正确的写作范围,但是无论如何,如果您要做这样的事情,该怎么做呢?我甚至不确定从哪里开始...
我想这样做可以使日期范围更加紧凑,易于阅读和美观。

1
需要更多的信息。您只是想显示日期还是操作它们?您正在使用一个日期(范围)还是两个单独的日期?如果是两个日期,那么我想这只是将它们格式化为您所需的样式,然后简单地将它们打印在一起的情况? - aLostMonkey
是的,这只是格式化的问题。就像 function format($date1, $date2) 或者其他什么一样。 - Svish
1
仍然感到失望,没有“使用这个库”的答案:/ - lkraav
2个回答

5
我认为没有一种明确定义的方法来完成这个任务,基本上只是逻辑问题。尝试用简单的文本写下你认为规则应该是什么以及一些示例,就像你提供的示例一样。如果它们是不同的月份怎么办?如果是2005年4月到2007年4月,那是2005年4月至2007年4月吗?
一旦你有了简单的文本规则,编写代码将会很容易。它只涉及决定你想要如何格式化它。

1
完全正确。这不是一个编码问题,而是一个规范问题。 - wallyk

3

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

    $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;  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接