我想将date()转换为“”年/月/周/天/小时/分钟/秒前。我该怎么做?
将日期保存到数据库时,我正在使用date('M j, Y')
。是否有更有效的方法来保存我想要生产的日期?
(我的网站尚未生效,所以如果需要,我可以在数据库和代码中做任何我需要的事情)
答案 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个月)。