1

我有一个变量 ($date) 保存事件的开始日期,格式如下:

 2012-11-20 (YYYY-M-D)

我还有另一个变量 ($duration) 持有一个数字,例如“3”,它是事件的天数或持续时间。如何通过持续时间变量增加日期变量中的日期,然后以这种格式显示事件日期

 20th - 23th November

谢谢!

4

2 回答 2

6

尝试这个:

echo date('F d Y');

有关详细信息,请参阅 php date()

如果你有2012-11-20一个变量,你可以这样做:

$date = '2012-11-20';
echo date('F d Y', strtotime($date));
//=> November 20 2012

需要考虑两件事:

  1. 如果您无法控制日期,您可能需要使用strtotime(). 如果您提供strtotime()无效的日期字符串,它将返回false
  2. E_NOTICE如果时区无效,则每次调用日期/时间函数都将生成一条消息,如果使用系统设置或环境变量,则生成一条E_STRICTor消息。另见date_default_timezone_set()E_WARNINGTZ

更强大的解决方案:

// date input
$date = '2012-11-20';

// set timezone
date_default_timezone_set('America/Chicago');

// validate date
if ( ($time=strtotime($date)) === false ) {
    throw new Exception("invalid date given: {$date}");
}

// output
echo date('F d Y', $time);

编辑

您更新了询问如何获取日期范围的问题。为此,我建议以下内容:

// input
$date = '2012-11-20';
$duration = 3;

// set timezone
date_default_timezone_set('America/Chicago');

// parse date
try {

    // init range
    $start = new DateTime($date);
    $end = clone $start;

    // modify end date based on $duration
    $end->modify(sprintf("+%d days", $duration));

    // output range
    echo $start->format('jS') . ' - ' . $end->format('jS F Y');

    //=> 20th - 23rd November 2012

}
catch (Exception $e) {
    die($e->getMessage());
}
于 2012-11-26T11:13:53.460 回答
0

首先,将您的日期转换为时间戳

$date_str = "2012-11-20";
$timestamp = strtotime($date_str);

然后将时间戳转换成你需要的格式

$formatted_date = date('F d Y', $timestamp);
于 2012-11-26T11:18:35.793 回答