1

我想将 date() 转换为 "" 年/月/周/天/小时/分钟/秒前。我怎么做?

我目前date('M j, Y')在将日期保存到数据库时使用。有没有更有效的方法来保存我想要在上面制作的日期?

(我的网站还没有上线,所以我可以在数据库中做任何我需要的事情,如果需要的话)

4

1 回答 1

3

您应该始终以 MySQL 的日期时间格式 (YYYY-MM-DD) 保存日期。这使您可以轻松利用 MySQL 的内置日期功能。以任何其他格式存储它意味着(可能很多)当您想要做更多工作时为您做更多工作,然后只显示这些值。

要完成你想用 PHP 做的事情,你会DateTime()(基于这个答案):

$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);
$interval  = $datetime1->diff($datetime2);
if ($interval->days <= 7)
{
    $elapsed   = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
    $elapsed   = str_replace(array('0 years,', ' 0 months,', ' 0 days,',  ' 0 hours,', ' 0 minutes,'), '', $elapsed);
    $elapsed   = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ',  ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
    echo $elapsed;
}
else 
{
    echo $firstDate;
}

$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);

这些行创建DateTime()具有各自日期的对象。

$interval  = $datetime1->diff($datetime2);

此行从第一个日期中减去第二个日期,并将差值作为DateInterval()对象返回。

if ($interval->days > 7)

此行检查两个日期之间已过去 7 天或更长时间。如果是这样,则执行第一个代码块。如果不是,则打印出第一个日期。

$elapsed   = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
$elapsed   = str_replace(array('0 years,', ' 0 months,', ' 0 days,',  ' 0 hours,', ' 0 minutes,'), '', $elapsed);
$elapsed   = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ',  ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
echo $elapsed;

此代码块仅获取两个日期(一个对象)之间的日期差异,DateInterval()并将其格式化为您请求的格式。第二行删除任何没有值的时间段(即 0 个月)并将它们从字符串中删除。第三行采用具有一个值的任何句点(即 1 个月)并在末尾剪掉不必要的“s”(即 1 个月变为 1 个月)。

于 2013-09-18T00:41:46.813 回答