php - 博客文章上的 PHP 时间戳问题
问题描述
这几天我一直在努力解决这个问题,所以我正在寻找你可能有的任何见解。我一直在使用以下内容在用户帖子上输入时间戳:
//Timeframe
$date_time_now = date("Y-m-d H:i:s");
$start_date = new DateTime($date_time); //Time of post
$end_date = new DateTime($date_time_now); //Current time
$interval = $start_date->diff($end_date); //Difference between dates
if($interval->y >= 1) {
if($interval == 1)
$time_message = $interval->y . " year ago"; //1 year ago
else
$time_message = $interval->y . " years ago"; //1+ year ago
}
else if ($interval-> m >= 1) {
if($interval->d == 0) {
$days = " ago";
}
else if($interval->d == 1) {
$days = $interval->d . " day ago";
}
else {
$days = $interval->d . " days ago";
}
if($interval->m == 1) {
$time_message = $interval->m . " month " . $days;
}
else {
$time_message = $interval->m . " months " . $days;
}
}
else if($interval->d >= 1) {
if($interval->d == 1) {
$time_message = "Yesterday";
}
else {
$time_message = $interval->d . " days ago";
}
}
else if($interval->h >= 1) {
if($interval->h == 1) {
$time_message = $interval->h . " hour ago";
}
else {
$time_message = $interval->h . " hours ago";
}
}
else if($interval->i >= 1) {
if($interval->i == 1) {
$time_message = $interval->i . " minute ago";
}
else {
$time_message = $interval->i . " minutes ago";
}
}
else {
if($interval->s < 30) {
$time_message = "Just now";
}
else {
$time_message = $interval->s . " seconds ago";
}
}
在 html 中,我将其输出为:
<span class='comment-date'>$time_message</span>
直到最近一切正常,直到几天前我才注意到,但我怀疑它是从 2019 年开始的。发生的事情是在一些帖子上我收到以下错误:
Notice: Object of class DateInterval could not be converted to int in C:\xampp\htdocs\LEARN_123\includes\classes\Post.php on line 311
311行是指if($interval == 1)
上面的代码。我还注意到,对于超过 1 年的帖子,它并没有遵循else
声明$time_message = $interval->y . " years ago"; //1+ year ago
。对于一些它只是说 1 年前,其他人我得到了Notice:
我一直在经历这个,但似乎无法弄清楚。任何人都可以看到可能发生的事情,或者对我如何纠正这个问题有任何线索吗?
解决方案
if($interval == 1)
应该 if($interval->y == 1)
此外,您问的每个地方if($interval->y|m|d|h|i|s==1
都不需要它,$time_message = $interval->y|m|d|h|i|s . " frame ago";
它可以更简单地是 $time_message = "1 frame ago";
frame = 年、月、日、小时、分钟、秒
或者您可以使用以下内容进行更多简化并去掉额外的 if/else 语句:
$time_message = $interval->y|m|d|h|i|s . " frame" . ($interval->y|m|d|h|i|s > 1 ? "s " : " ") . ago";
推荐阅读
- python - 如何制作一个用字符串替换python文件中的换行符的程序
- python - 我想知道如何将十进制转换为二进制
- openssl - 是否可以创建没有签名字段的 x509 证书?
- python - 坚持写到excel文件的熊猫
- javascript - 如何在 ASP.NET MVC 应用程序中管理 JavaScript - 单独文件与 Razor View 内部?
- mysql - 我在编译新内核后将所有数据库更新应用到我的 SQL 服务器,并收到此错误,我该怎么办?
- javascript - 如何访问在类的方法中声明的变量?
- android-studio - 如何仅使用其路径将 txt 文件转换为字符串?
- azure - Azure 服务总线是消息代理还是事件存储?
- python - 如何使用 Django 将视图变量传递给模板