繁体   English   中英

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

[英]PHP Convert date to “blank” days/hours/seconds ago

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

date('M j, Y')保存到数据库中时date('M j, Y')我当前正在使用date('M j, Y') 有没有一种更有效的方法来保存我想在上面生产的日期?

(我的网站尚未启用,因此我可以做数据库中需要做的一切,如果需要的话可以编写代码)

您应该始终以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)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM