PHP将日期转换为“空白”天/小时/秒前

时间:2013-09-18 00:36:43

标签: javascript php html mysql date

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

将日期保存到数据库时,我正在使用date('M j, Y')。是否有更有效的方法来保存我想要生产的日期?

(我的网站尚未生效,所以如果需要,我可以在数据库和代码中做任何我需要的事情)

1 个答案:

答案 0 :(得分:3)

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

要完成您想要使用PHP的操作,您需DateTime()(基于this answer):

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

此行检查两个日期之间是否已经过了七天或更多天。如果是,则执行第一个代码块。如果没有,则打印出第一个日期。

$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个月)。