我想将 date() 转换为 "" 年/月/周/天/小时/分钟/秒前。我怎么做?
我目前date('M j, Y')
在将日期保存到数据库时使用。有没有更有效的方法来保存我想要在上面制作的日期?
(我的网站还没有上线,所以我可以在数据库中做任何我需要的事情,如果需要的话)
我想将 date() 转换为 "" 年/月/周/天/小时/分钟/秒前。我怎么做?
我目前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)
此行检查两个日期之间已过去 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 个月)。