Finding the difference between 2 times in hours:min - php

I'm trying to find the difference between 2 times obtained from a sql query:
$WakeTime = '05:00:00'; //this is data of today pulled from sql.
$SleepTime = '20:30:00'; //this is data of yesterday pulled from sql.
The result I'm looking for is like:
$Sleep = 24 + $WakeTime - $SleepTime;
so that $Sleep should give '08:30';
Which it's the correct method to get this?

Try something like this, maybe it will be for you.
$result = gmdate("H:i", 86400 - strtotime($SleepTime) - strtotime($Waketime));
output: 08:30

$sleep = gmdate("H:i", 86400 - strtotime($row["SleepTime"]) + strtotime($row["WakeTime"]));
This worked consistently. The time, pulled from sql, formats 00:00 Hrs as 1584297000. So just in case the seconds are required by anyone, this is the number you need to subtract from your time. Probably this differs from TimeZone to TimeZone; you will need to check.

Related

Counting days from two date fields, start counting from 1 instead of 0?

I'm using a PHP function to count days between start date and end date for courses on a website. The function itself works flawless, however I'd like the counting to start from 1 as standard instead of 0.
My code looks like this
function dateDifference($start_date, $end_date) {
// calulating the difference in timestamps
$diff = strtotime($start_date) - strtotime($end_date);
// 1 day = 24 hours
// 6 * 60 * 60 = 86400 seconds
return ceil(abs($diff / 86400));
}
I guess the answer to this question is pretty straight forward however I'm not that wandered in PHP.
Thanks!
After just some mins I managed to solve the mystery myself and now I feel pretty dumb since the solution really is super simple.. code below.
return ceil(abs($diff / 86400) +1);
So what I did was to add +1 next to the calculation meaning the $diff array will add 1 day to however many days the calculation will count to.
Might help someone!

Cannot figure out php date() timestamps for two timestamps

With PHP, I am trying to convert a bunch of numbers into a a readable format, the thing is, I have no idea how/what format these are in or can be parsed in using the date() or time() functions in php. there are two of these as well.
(they're built from a total time spent online and time since last log-on)
onlinetime : 1544946 = 2w 3d 21h 9m
lastonline : 1397087222 = 1h 32m
does anyone know the way to get the two different times from the two different timestamps?
If you have a Unix timestamp, take a look at Convert timestamp to readable date/time PHP. The PHP documentation is here: http://php.net/manual/en/function.date.php.
For the online time, you could do modulo arithmetic to figure out the values for each, and then just make a string out of the result. Someone may have a nicer suggestion for this though.
I think John is right, the first is the number of seconds in the timespan listed. And the second certainly looks like a unix timestamp to me. So here's how you can get what you want from these sets of numbers:
1) For the first number, simply divide the number by the seconds in a given time span and use floor():
$timeElapsed = 154496; // in this case
$weeksElapsed = floor($timeElapsed / 604800);
$remainder = $timeElapsed % 604800;
$daysElapsed = floor($remainder / 86400);
etc...
2) For the second number, you can do the same thing by first getting the current timestamp and then subtracting the given timestamp from it:
$lastOnline = 1397087222; // again, in this case
$currentTimestamp = time();
$elapsedSinceLastLogin = $currentTimestamp - $lastonline;
$weeksSinceLastLogin = floor($elapsedSinceLastLogin / 604800);
etc...

Why isnt my MySQL BETWEEN operator not working?

MySQL table "flightSched" is connected to time, similar to the one below:
flightNo |day |time |arrivalTimeSec
=============================================
WERE112 |Tuesday | 1:00 |1381186800
FGHG234 |Tuesday |23:00 |1381266000
CGHF345 |Tuesday |00:00 |1381183200
I have a mysql query that select all data between two times. This is the query:
$CurrentTimeMinus30min = date('H:i', strtotime('-30 minutes')); //Current Time minus 30minutes
$CurrentTimeMinus30min = strtotime($CurrentTimeMinus30min);
$CurrentTimePlus4Hours = date('H:i', strtotime('+240 minutes')); //Current Time plus 4 hours
$CurrentTimePlus4Hours = strtotime($CurrentTimePlus4Hours);
$query = $mysqli->query("
SELECT * FROM flightSched
WHERE day = '$currentDay'
AND arrivalTimeSec
BETWEEN '$CurrentTimeMinus30min'
AND '$CurrentTimePlus4Hours'
");
I was advised to used strtotime() function on the time values to be able to use them in a BETWEEN MySQL query. This doesn't seem to be working at all.
Where am I going wrong with this query? Any help will be appreciated.
today I found the same problem with yours (mine about coordinates).
and I found out that in some case, a BETWEEN operator can only be used like this
..... WHERE columname BETWEEN smallervalue AND biggervalue
previously I've tried with the biggervalue at front since I dealt with negative numbers, and it fails.
you might found the same problem with your timestamp.
strtotime returns a timestamp so passing that into the MySQL query, like above, won't work. Try using FROM_UNIXTIME instead.
$query = $mysqli->query("SELECT * FROM flightSched
WHERE day = '$currentDay'
AND FROM_UNIXTIME(arrivalTimeSec) BETWEEN FROM_UNIXTIME($CurrentTimeMinus30min) AND FROM_UNIXTIME($CurrentTimePlus4Hours) " );
EDIT - I hadn't noticed that arrivalTimeSec was also a timestamp. The above mightn't be a workable answer for you, but try it. If it doesn't work, as others say, define what you mean by
This doesn't seem to be working at all.
Is it not returning any rows? Is it returning an error? Can you print out $CurrentTimeMinus30min and $CurrentTimePlus4Hours? Narrow down the potential areas for problems.
Have you tried to encapsulate the between? This could potentially solve your problem:
SELECT * FROM flightSched
WHERE day = '$currentDay'
AND (arrivalTimeSec BETWEEN '$CurrentTimeMinus30min' AND '$CurrentTimePlus4Hours')
Also why not just do:
$CurrentTimeMinus30min = strtotime('-30 minutes');
Or
$CurrentTimeMinus30min = strtotime(date('Y-m-d H:i:00', strtotime('-30 minutes')));
Please send us some examples of what your variables are generating.
Your time calculation with date("H:i",...) and strtotime(..) seems to actually produce the correct results, although there is a much easier way to add/substract n minutes from the current time:
$now = time();
$currentTimeMinus30min = $now - 30*60; // 30 minutes * 60 seconds
$currentTimePlus4Hours = $now + 4*60*60; // 4 hours * 60 minutes * 60 seconds
(I assume your time entries in your database are unix timestamps.)
Your query looks fine, too, but there are a few things to keep in mind:
You have redundant fields in your database (day and time can be calculated from the timestamp)
Working with time variables can easily lead to confusion, as the time passes on and if you have no entries in your database that match the specified time range (-30m to +240m) the result set is empty. So to test the query update the database with current time stamps.
I would suggest the following:
Drop the redundant columns day and time and just use the timestamp as base for your calculations, because the day and time is already included in the timestamp. So just use a simple query like
select * from flightShed
where arrivalTime between $begin and $end

Find difference between now and a file's last change time in PHP

I have a file called "file.txt".
I get its last change time with this:
$lastTime = filemtime("file.txt");
Then I make
$lastDate = date("Y-m-d",strtotime( $lastTime ));
$todaysDate = date("Y-m-d",strtotime('now'));
Then I substract lastDate from todaysDate and find the difference.
Is there a quicker way to do this?
I don't want to check whether the difference of seconds is >= 86400 or not.
For example the difference between these two dates must be "1".
2013-03-31 10:00
2013-03-30 19:00
If i check for the difference of seconds I will have 54K seconds, which is smaller than 86400 seconds.
Get the difference in seconds, then convert to days and round the result.
$diff = time()-filemtime("file.txt");
$days = round($diff/86400);
You could also use floor or ceil in place of round depending on exactly how you want to handle partial days.

Time difference between current time and timestamp+milliseconds

I'm wanting to display on a php page the difference between the current server time and a datetime row plus a row that has milliseconds in it, so I guess the equation would look kind of like ((Datetime+Milliseconds)-Server Time).
The only problem is, I'm not sure how to do it in code. I can currently get the difference between the datetime row and the current time with echo strtotime($row['date_added']) - time(); When I try adding the row that contains the milliseconds, date_mil, I get a really long number.
The date in the row date_added looks like 2012-05-25 16:55:06 and the value of the date_mil is around 218238.
I'm still learning how to do all of this, and this has me confused. Thanks for the help!
I just solved my own problem.
$difference = time() - strtotime($row['date_added']);
$milliseconds = round(($row['date_mil']) * .001);
echo $milliseconds - $difference;

Categories