Formatting date difference in human-friendly terms
Clash Royale CLAN TAG#URR8PPP
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty margin-bottom:0;
up vote
1
down vote
favorite
I've written a function to take the difference between two dates and display it in a particular format. I've used a lot of if-else
statements, which seems a little messy. Is there a way to shorten this up? Would using the ternary operator make sense?
$date1 = '2018-04-30 10:36:29';
$date2 = '2018-04-30 10:35:29';
echo dateDiff($date1, $date2);
function dateDiff($date1, $date2)
$date_1 = new DateTime($date1);
$date_2 = new DateTime($date2);
$diff = $date_1->diff($date_2);
if($diff->days > 365)
return $date_1->format('Y-m-d');
elseif($diff->days < 366 AND $diff->days > 7)
return $date_1->format('M d');
elseif($diff->days > 2 AND $diff->days < 8)
return $date_1->format('L - H:i');
elseif($diff->days == 2) return "Yesterday ".$date_1->format('H:i');
elseif($diff->days < 2 AND $diff->days > 0 OR $diff->days == 0 AND $diff->h > 1) return $date_1->format('H:i');
elseif($diff->days == 0 AND $diff->h < 1 AND $diff->i >= 1) return $diff->i." min ago";
elseif($diff->days == 0 AND $diff->h < 1 AND $diff->i < 1) return "just now";
else return $error = "Error!";
php datetime formatting
add a comment |Â
up vote
1
down vote
favorite
I've written a function to take the difference between two dates and display it in a particular format. I've used a lot of if-else
statements, which seems a little messy. Is there a way to shorten this up? Would using the ternary operator make sense?
$date1 = '2018-04-30 10:36:29';
$date2 = '2018-04-30 10:35:29';
echo dateDiff($date1, $date2);
function dateDiff($date1, $date2)
$date_1 = new DateTime($date1);
$date_2 = new DateTime($date2);
$diff = $date_1->diff($date_2);
if($diff->days > 365)
return $date_1->format('Y-m-d');
elseif($diff->days < 366 AND $diff->days > 7)
return $date_1->format('M d');
elseif($diff->days > 2 AND $diff->days < 8)
return $date_1->format('L - H:i');
elseif($diff->days == 2) return "Yesterday ".$date_1->format('H:i');
elseif($diff->days < 2 AND $diff->days > 0 OR $diff->days == 0 AND $diff->h > 1) return $date_1->format('H:i');
elseif($diff->days == 0 AND $diff->h < 1 AND $diff->i >= 1) return $diff->i." min ago";
elseif($diff->days == 0 AND $diff->h < 1 AND $diff->i < 1) return "just now";
else return $error = "Error!";
php datetime formatting
return $error = "Error!";
why?
â hjpotter92
Jan 12 at 17:40
Just wrote to test the code only. @hjpotter92
â Otabek
Jan 12 at 17:43
Many online sites (including this one) use the exact same feature you are trying to code. So it may prove useful to read their source code to see how they do it. This will certainly give you new ideas and you will be free to implement the one you like best.
â Patrick Mevzek
Jan 12 at 17:48
add a comment |Â
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I've written a function to take the difference between two dates and display it in a particular format. I've used a lot of if-else
statements, which seems a little messy. Is there a way to shorten this up? Would using the ternary operator make sense?
$date1 = '2018-04-30 10:36:29';
$date2 = '2018-04-30 10:35:29';
echo dateDiff($date1, $date2);
function dateDiff($date1, $date2)
$date_1 = new DateTime($date1);
$date_2 = new DateTime($date2);
$diff = $date_1->diff($date_2);
if($diff->days > 365)
return $date_1->format('Y-m-d');
elseif($diff->days < 366 AND $diff->days > 7)
return $date_1->format('M d');
elseif($diff->days > 2 AND $diff->days < 8)
return $date_1->format('L - H:i');
elseif($diff->days == 2) return "Yesterday ".$date_1->format('H:i');
elseif($diff->days < 2 AND $diff->days > 0 OR $diff->days == 0 AND $diff->h > 1) return $date_1->format('H:i');
elseif($diff->days == 0 AND $diff->h < 1 AND $diff->i >= 1) return $diff->i." min ago";
elseif($diff->days == 0 AND $diff->h < 1 AND $diff->i < 1) return "just now";
else return $error = "Error!";
php datetime formatting
I've written a function to take the difference between two dates and display it in a particular format. I've used a lot of if-else
statements, which seems a little messy. Is there a way to shorten this up? Would using the ternary operator make sense?
$date1 = '2018-04-30 10:36:29';
$date2 = '2018-04-30 10:35:29';
echo dateDiff($date1, $date2);
function dateDiff($date1, $date2)
$date_1 = new DateTime($date1);
$date_2 = new DateTime($date2);
$diff = $date_1->diff($date_2);
if($diff->days > 365)
return $date_1->format('Y-m-d');
elseif($diff->days < 366 AND $diff->days > 7)
return $date_1->format('M d');
elseif($diff->days > 2 AND $diff->days < 8)
return $date_1->format('L - H:i');
elseif($diff->days == 2) return "Yesterday ".$date_1->format('H:i');
elseif($diff->days < 2 AND $diff->days > 0 OR $diff->days == 0 AND $diff->h > 1) return $date_1->format('H:i');
elseif($diff->days == 0 AND $diff->h < 1 AND $diff->i >= 1) return $diff->i." min ago";
elseif($diff->days == 0 AND $diff->h < 1 AND $diff->i < 1) return "just now";
else return $error = "Error!";
php datetime formatting
edited Jan 12 at 17:46
200_success
123k14143401
123k14143401
asked Jan 12 at 17:25
Otabek
169110
169110
return $error = "Error!";
why?
â hjpotter92
Jan 12 at 17:40
Just wrote to test the code only. @hjpotter92
â Otabek
Jan 12 at 17:43
Many online sites (including this one) use the exact same feature you are trying to code. So it may prove useful to read their source code to see how they do it. This will certainly give you new ideas and you will be free to implement the one you like best.
â Patrick Mevzek
Jan 12 at 17:48
add a comment |Â
return $error = "Error!";
why?
â hjpotter92
Jan 12 at 17:40
Just wrote to test the code only. @hjpotter92
â Otabek
Jan 12 at 17:43
Many online sites (including this one) use the exact same feature you are trying to code. So it may prove useful to read their source code to see how they do it. This will certainly give you new ideas and you will be free to implement the one you like best.
â Patrick Mevzek
Jan 12 at 17:48
return $error = "Error!";
why?â hjpotter92
Jan 12 at 17:40
return $error = "Error!";
why?â hjpotter92
Jan 12 at 17:40
Just wrote to test the code only. @hjpotter92
â Otabek
Jan 12 at 17:43
Just wrote to test the code only. @hjpotter92
â Otabek
Jan 12 at 17:43
Many online sites (including this one) use the exact same feature you are trying to code. So it may prove useful to read their source code to see how they do it. This will certainly give you new ideas and you will be free to implement the one you like best.
â Patrick Mevzek
Jan 12 at 17:48
Many online sites (including this one) use the exact same feature you are trying to code. So it may prove useful to read their source code to see how they do it. This will certainly give you new ideas and you will be free to implement the one you like best.
â Patrick Mevzek
Jan 12 at 17:48
add a comment |Â
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
Chained ternary expressions in PHP are a major pain in the ass â don't use them!
You have a lot of tests that are redundant, since earlier tests will have already eliminated longer periods. The error case at the end also seems pointless.
Use consistent indentation and braces for readability and safety â please don't skimp.
function dateDiff($date1, $date2)
$date_1 = new DateTime($date1);
$date_2 = new DateTime($date2);
$diff = $date_1->diff($date_2);
if ($diff->days > 365)
return $date_1->format('Y-m-d');
elseif ($diff->days > 7)
return $date_1->format('M d');
elseif ($diff->days > 2)
return $date_1->format('L - H:i');
elseif ($diff->days == 2)
return "Yesterday ".$date_1->format('H:i');
elseif ($diff->days > 0 OR $diff->h > 1)
return $date_1->format('H:i');
elseif ($diff->i >= 1)
return $diff->i." min ago";
else
return "Just now";
Be sure to use consistent capitalization for "yesterday" and "just now".
add a comment |Â
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
Chained ternary expressions in PHP are a major pain in the ass â don't use them!
You have a lot of tests that are redundant, since earlier tests will have already eliminated longer periods. The error case at the end also seems pointless.
Use consistent indentation and braces for readability and safety â please don't skimp.
function dateDiff($date1, $date2)
$date_1 = new DateTime($date1);
$date_2 = new DateTime($date2);
$diff = $date_1->diff($date_2);
if ($diff->days > 365)
return $date_1->format('Y-m-d');
elseif ($diff->days > 7)
return $date_1->format('M d');
elseif ($diff->days > 2)
return $date_1->format('L - H:i');
elseif ($diff->days == 2)
return "Yesterday ".$date_1->format('H:i');
elseif ($diff->days > 0 OR $diff->h > 1)
return $date_1->format('H:i');
elseif ($diff->i >= 1)
return $diff->i." min ago";
else
return "Just now";
Be sure to use consistent capitalization for "yesterday" and "just now".
add a comment |Â
up vote
1
down vote
accepted
Chained ternary expressions in PHP are a major pain in the ass â don't use them!
You have a lot of tests that are redundant, since earlier tests will have already eliminated longer periods. The error case at the end also seems pointless.
Use consistent indentation and braces for readability and safety â please don't skimp.
function dateDiff($date1, $date2)
$date_1 = new DateTime($date1);
$date_2 = new DateTime($date2);
$diff = $date_1->diff($date_2);
if ($diff->days > 365)
return $date_1->format('Y-m-d');
elseif ($diff->days > 7)
return $date_1->format('M d');
elseif ($diff->days > 2)
return $date_1->format('L - H:i');
elseif ($diff->days == 2)
return "Yesterday ".$date_1->format('H:i');
elseif ($diff->days > 0 OR $diff->h > 1)
return $date_1->format('H:i');
elseif ($diff->i >= 1)
return $diff->i." min ago";
else
return "Just now";
Be sure to use consistent capitalization for "yesterday" and "just now".
add a comment |Â
up vote
1
down vote
accepted
up vote
1
down vote
accepted
Chained ternary expressions in PHP are a major pain in the ass â don't use them!
You have a lot of tests that are redundant, since earlier tests will have already eliminated longer periods. The error case at the end also seems pointless.
Use consistent indentation and braces for readability and safety â please don't skimp.
function dateDiff($date1, $date2)
$date_1 = new DateTime($date1);
$date_2 = new DateTime($date2);
$diff = $date_1->diff($date_2);
if ($diff->days > 365)
return $date_1->format('Y-m-d');
elseif ($diff->days > 7)
return $date_1->format('M d');
elseif ($diff->days > 2)
return $date_1->format('L - H:i');
elseif ($diff->days == 2)
return "Yesterday ".$date_1->format('H:i');
elseif ($diff->days > 0 OR $diff->h > 1)
return $date_1->format('H:i');
elseif ($diff->i >= 1)
return $diff->i." min ago";
else
return "Just now";
Be sure to use consistent capitalization for "yesterday" and "just now".
Chained ternary expressions in PHP are a major pain in the ass â don't use them!
You have a lot of tests that are redundant, since earlier tests will have already eliminated longer periods. The error case at the end also seems pointless.
Use consistent indentation and braces for readability and safety â please don't skimp.
function dateDiff($date1, $date2)
$date_1 = new DateTime($date1);
$date_2 = new DateTime($date2);
$diff = $date_1->diff($date_2);
if ($diff->days > 365)
return $date_1->format('Y-m-d');
elseif ($diff->days > 7)
return $date_1->format('M d');
elseif ($diff->days > 2)
return $date_1->format('L - H:i');
elseif ($diff->days == 2)
return "Yesterday ".$date_1->format('H:i');
elseif ($diff->days > 0 OR $diff->h > 1)
return $date_1->format('H:i');
elseif ($diff->i >= 1)
return $diff->i." min ago";
else
return "Just now";
Be sure to use consistent capitalization for "yesterday" and "just now".
answered Jan 12 at 17:57
200_success
123k14143401
123k14143401
add a comment |Â
add a comment |Â
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f184970%2fformatting-date-difference-in-human-friendly-terms%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
return $error = "Error!";
why?â hjpotter92
Jan 12 at 17:40
Just wrote to test the code only. @hjpotter92
â Otabek
Jan 12 at 17:43
Many online sites (including this one) use the exact same feature you are trying to code. So it may prove useful to read their source code to see how they do it. This will certainly give you new ideas and you will be free to implement the one you like best.
â Patrick Mevzek
Jan 12 at 17:48