如何在 php 中使用 diff 创建日期间隔
How to create date interval with diff in php
我想在我的帖子中创建年龄。结果必须是这样的,例如:
刚刚,1 分钟前,1 小时前,1 天前, 1 个月前 & 1 年前。
$datetime1 = date_create($value['date']);
$datetime2 = date_create("now");
$diff=date_diff($datetime1,$datetime2);
if($diff->i >0){
$final_date = $diff->format("%I Minutes Ago");
}else if($diff->h >0){
$final_date = $diff->format("%H Hours Ago");
}else if($diff->y >0){
$final_date = $diff->format("%Y Years Ago");
}else if($diff->m >0){
$final_date = $diff->format("%M Months Ago");
}else if($diff->d >0){
$final_date = $diff->format("%D Days Ago");
} else {
$final_date = "Just Now";
}
我在 $value['date']
的约会是这样的 2018-05-11 07:38:47.
当我 运行 使用该代码时,结果仅在 分钟 后显示,在数小时、一天等时间不工作...
试试这个
$interval = $datetime1->diff($datetime2);
echo $interval->format('%Y years %m months %d days %H hours %i minutes %s seconds');
或者如果您需要单独检查年份
if($diff->y >0){
$final_date = $diff->format("%Y Years Ago");
}
else if($diff->m >0){
$final_date = $diff->format("%M Months Ago");
}
else if($diff->d >0){
$final_date = $diff->format("%D Days Ago");
}
else if($diff->h >0){
$final_date = $diff->format("%H Hours Ago");
}
else if($diff->i >0){
$final_date = $diff->format("%I Minutes Ago");
}
else {
$final_date = "Just Now";
}
- 也许值得阅读一下 If / Else Conditionals 如何在编程中工作。本质上,应该任何 if 语句 return 为真,所有其他 else if 语句都将被忽略/不执行。
- 其次,您应该快速了解一下 String Concatenation 在 PHP 中的工作原理。
为了帮助您,我已经使用上面提到的方法构建了一个工作示例:
// DATE
$value['date'] = "2018-05-11 07:38:47";
// HTML VARIABLE
$final_date = '';
// DATE OBJECTS
$datetime1 = date_create($value['date']);
$datetime2 = date_create("now");
// DATE OBJECTS DIFFERENCE
$diff = date_diff($datetime1, $datetime2);
// IF DIFFERENCE IS LESS THAN ONE MINUTE, DISPLAY "Just Now"
if($diff->i == 0)
{
$final_date = $diff->format("Just Now");
}
else
{
// ELSE, CONCATENATE STRING FOR EACH VALID DIFFERENCE
if($diff->i > 0)
{
$final_date = $diff->format("%I Minutes Ago, ");
}
if($diff->h > 0)
{
$final_date .= $diff->format("%H Hours Ago, ");
}
if($diff->y > 0)
{
$final_date .= $diff->format("%Y Years Ago, ");
}
if($diff->m > 0)
{
$final_date .= $diff->format("%M Months Ago, ");
}
if($diff->d > 0)
{
$final_date .= $diff->format("%D Days Ago, ");
}
// REMOVE THE FINAL ", " FROM THE STRING
$final_date = substr($final_date, 0, -2);
}
// DISPLAY RESULT
echo $final_date;
$datetime1 = date_create($value['date']);
$datetime2 = date_create("now");
$diff = date_diff($datetime1, $datetime2);
if ($diff->i > 0) {
echo $min = $diff->format("%I Minutes Ago")."<br/>";
} if ($diff->h > 0) {
echo $hr = $diff->format("%H Hours Ago")."<br/>";
} if ($diff->y > 0) {
echo $yr = $diff->format("%Y Years Ago")."<br/>";
} if ($diff->m > 0) {
echo $mn = $diff->format("%M Months Ago")."<br/>";
} if ($diff->d > 0) {
echo $day = $diff->format("%D Days Ago")."<br/>";
} else {
echo $just = "Just Now"."<br/>";
}
我想在我的帖子中创建年龄。结果必须是这样的,例如: 刚刚,1 分钟前,1 小时前,1 天前, 1 个月前 & 1 年前。
$datetime1 = date_create($value['date']);
$datetime2 = date_create("now");
$diff=date_diff($datetime1,$datetime2);
if($diff->i >0){
$final_date = $diff->format("%I Minutes Ago");
}else if($diff->h >0){
$final_date = $diff->format("%H Hours Ago");
}else if($diff->y >0){
$final_date = $diff->format("%Y Years Ago");
}else if($diff->m >0){
$final_date = $diff->format("%M Months Ago");
}else if($diff->d >0){
$final_date = $diff->format("%D Days Ago");
} else {
$final_date = "Just Now";
}
我在 $value['date']
的约会是这样的 2018-05-11 07:38:47.
当我 运行 使用该代码时,结果仅在 分钟 后显示,在数小时、一天等时间不工作...
试试这个
$interval = $datetime1->diff($datetime2);
echo $interval->format('%Y years %m months %d days %H hours %i minutes %s seconds');
或者如果您需要单独检查年份
if($diff->y >0){
$final_date = $diff->format("%Y Years Ago");
}
else if($diff->m >0){
$final_date = $diff->format("%M Months Ago");
}
else if($diff->d >0){
$final_date = $diff->format("%D Days Ago");
}
else if($diff->h >0){
$final_date = $diff->format("%H Hours Ago");
}
else if($diff->i >0){
$final_date = $diff->format("%I Minutes Ago");
}
else {
$final_date = "Just Now";
}
- 也许值得阅读一下 If / Else Conditionals 如何在编程中工作。本质上,应该任何 if 语句 return 为真,所有其他 else if 语句都将被忽略/不执行。
- 其次,您应该快速了解一下 String Concatenation 在 PHP 中的工作原理。
为了帮助您,我已经使用上面提到的方法构建了一个工作示例:
// DATE
$value['date'] = "2018-05-11 07:38:47";
// HTML VARIABLE
$final_date = '';
// DATE OBJECTS
$datetime1 = date_create($value['date']);
$datetime2 = date_create("now");
// DATE OBJECTS DIFFERENCE
$diff = date_diff($datetime1, $datetime2);
// IF DIFFERENCE IS LESS THAN ONE MINUTE, DISPLAY "Just Now"
if($diff->i == 0)
{
$final_date = $diff->format("Just Now");
}
else
{
// ELSE, CONCATENATE STRING FOR EACH VALID DIFFERENCE
if($diff->i > 0)
{
$final_date = $diff->format("%I Minutes Ago, ");
}
if($diff->h > 0)
{
$final_date .= $diff->format("%H Hours Ago, ");
}
if($diff->y > 0)
{
$final_date .= $diff->format("%Y Years Ago, ");
}
if($diff->m > 0)
{
$final_date .= $diff->format("%M Months Ago, ");
}
if($diff->d > 0)
{
$final_date .= $diff->format("%D Days Ago, ");
}
// REMOVE THE FINAL ", " FROM THE STRING
$final_date = substr($final_date, 0, -2);
}
// DISPLAY RESULT
echo $final_date;
$datetime1 = date_create($value['date']);
$datetime2 = date_create("now");
$diff = date_diff($datetime1, $datetime2);
if ($diff->i > 0) {
echo $min = $diff->format("%I Minutes Ago")."<br/>";
} if ($diff->h > 0) {
echo $hr = $diff->format("%H Hours Ago")."<br/>";
} if ($diff->y > 0) {
echo $yr = $diff->format("%Y Years Ago")."<br/>";
} if ($diff->m > 0) {
echo $mn = $diff->format("%M Months Ago")."<br/>";
} if ($diff->d > 0) {
echo $day = $diff->format("%D Days Ago")."<br/>";
} else {
echo $just = "Just Now"."<br/>";
}