If Not True Then False

PHP: Calculate Real Differences Between Two Dates or Timestamps - Comment Page: 9

I was using simple function to calculate difference between two dates and timestamps until I noticed, it’s not working correctly in long intervals. It’s very easy to calculate difference between two timestamps in seconds, but it’s much more complicated print difference in human readable format. The Internet can be found in a wide range of ways to do this thing, but as a rule...
Categories:
Tagged with:

221 Comments

Leave a Comment

Your email address will not be published. Required fields are marked *

Input your comment.
help

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Input your name.

dansk

hi..nice work and thanks for sharing…i would like to know how to translate the month days year into another language

reply Reply
boosoo

hi how can i translate years months days etc.. in another language please ?

reply Reply
JR

Hi Marcel Epp,

If you have nulls in database, then you have to handle that case, like:


function dateDiff($time1, $time2, $precision = 6) {

    if (is_null($time1) || is_null($time2)) {
        return false;
    }

    // If not numeric then convert texts to unix timestamps
    ...
}
reply Reply
Marcel Epp

Hi,

it’s me again. How can get an output like
00:12:39?

I have to put more of these outputs together to get the time from all.

Station1 = 00:01:20
Station2 = 00:02:15
Station3 = 01:34:10

all togehter = 01:37:45

reply Reply
JR

Hi,

This function doesn’t do it, but you can try to convert all hours, minutes and seconds to seconds and convert total sum of seconds back to hours, minutes and seconds.

Example:


< ?php

        $stations = array('00:01:20', '00:02:15', '01:34:10');

        $total = 0;

        foreach ($stations as $station) {
                $parsed = date_parse($station);
                $seconds = $parsed['hour'] * 3600 +
                        $parsed['minute'] * 60 + $parsed['second'];
                $total += $seconds;
        }

        echo gmdate("H:i:s", $total) . "\n";
reply Reply
Alessandro

Hello! I’m using your function for a date difference and works very well, but I must add another variable is an extratime in minutes. Is there any way to use your function for doing this operation?

Example:

Start : 14/09/2015 10:03:05
Suspension for x minutes: from 14/09/2015 11:04:39 for 27 minutes
Stop : 14/09/2015 11:14:02

Result: 1 hour and 11 minutes

Instead I need 1 hour and 11 minutes – 27 minutes = The real time worked.

thank you in advantage

reply Reply
JR

Hi Alessandro,

Here is one possible way, if you can convert that suspension time to seconds:


--- orig.php	2015-10-22 09:10:33.936394437
+++ test.php	2015-10-22 09:08:35.088546417
@@ -5,7 +5,7 @@
  
   // Time format is UNIX timestamp or
   // PHP strtotime compatible strings
-  function dateDiff($time1, $time2, $precision = 6) {
+  function dateDiff($time1, $time2, $suspension, $precision = 6) {
     // If not numeric then convert texts to unix timestamps
     if (!is_int($time1)) {
       $time1 = strtotime($time1);
@@ -22,6 +22,10 @@
       $time2 = $ttime;
     }
  
+    $time1 = $time1 + $suspension;
+    // OR
+    //$time2 = $time2 - $suspension;
+
     // Set up intervals and diffs arrays
     $intervals = array('year','month','day','hour','minute','second');
     $diffs = array();
@@ -69,3 +73,5 @@
     // Return string with times
     return implode(", ", $times);
   }
+
+  echo dateDiff('2015-09-14 10:03:05', '2015-09-14 11:14:02', (27*60)) . "\n";
reply Reply
Muhammad Shahzad

For example
6 years
19 years
2 months
6 years, 2 months
5 years

Total=?? how to add total year?

it is output in loop, mean one person have experience in different period then how to find total year experience?

reply Reply
freddy

Hello Muhaammad, each diff date you should put in avariable then count it,

reply Reply
Kristian

Hey I really like this function but If I need to only display the different hours between working hours, how would I do that,

I’m think something like this, but The interval loops got me a little confused, I know this try to increment start from year but I always need to know if the time is in working hours.

$time = date(“Hi”, strtotime(‘+’.$num.’ minutes’));
$day = date(“D”, strtotime(‘+’ . $num . ‘ minutes’));
if($day != ‘Sat’ && $day != ‘Sun’ && $time >= 800 && $time <= 1800)
{

Could you help please?

reply Reply
abofhdx5

great work,

i want ask about if i need output in Second , or minute ?

i dont need hours ,

for example :

In : 12:00
out : 1:05
dateDiff = 65 Minutes

reply Reply