0
votes

i need help creating a count down timer in php. the problem is that i want to store an INT in my database which is going to be seconds, and this int is going to be added to current time to represent the future time.

now if i try to subtract the current time from future time to show how many seconds remaining, am getting wrong date.

here is my schema

mysql> desc buildings;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| name      | varchar(20) | YES  |     | NULL    |                |
| level     | int(2)      | YES  |     | NULL    |                |
| created   | int(11)     | NO   |     | NULL    |                |
| finished  | int(11)     | YES  |     | NULL    |                |
| player_id | int(11)     | YES  | MUL | NULL    |                |
| position  | int(2)      | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+

and heres the code to check


//starting session;
//connecting to database;

$query = "select created, finished from buildings where id = 1";
$query = mysql_query($query) or die ("could not query 
".mysql_error() ); while($row = mysql_fetch_assoc($query)) { $created = $row['created']; $finished = $row['finished']; } $CurrentTime = time(); $status = $finished - $CurrentTime; $realstatus = date("H:i:s",$status); if($status > 0) { echo "under construction, still ".$realstatus." to finsih"; }else { die("construction complete"); } //echo $created."
".$finished; ?>

any help will be greatly appreciated.

2
Show some code and describe what result you expect, and what result you get.Pekka
what column type and format are you storing the current time in, in your database?Crayon Violent
Are you subtracting one unix timestamp from another and using mktime to convert?MattB
Subtracting two unix timestamps (in seconds) will yield the number of seconds between those two stamps, not another date.Jack M.
@shmeeps will do my good man :)saadlulu

2 Answers

3
votes

Can't offer much of an answer without seeing your code, but maybe this will provide some insight:

<?php
    $fmt = 'Y-m-d H:i.s';                            // date formatting
    $now = time();                                   // current time
    $offset = 600;                                   // future offset
    $future = strtotime('+' . $offset . ' seconds'); // future time using relative time
    $timeleft = $future - $now;                      // time left in seconds

    // echo results
    echo 'Current Time: ' . date($fmt, $now) . PHP_EOL;
    echo 'Event Time: ' . date($fmt, $future) . PHP_EOL;
    echo 'Time Until Event: ' . $timeleft . ' seconds' . PHP_EOL;
?>

Output:

Current Time: 2011-05-03 12:00.15
Event Time: 2011-05-03 12:10.15
Time Until Event: 600 seconds
2
votes

Your problem is that you are subtracting two timestamps and format the result as a date. The result is not a date, it´s an interval between two dates.

If you want to know how many hours / minutes / seconds are remaining, you just have to divide your result $status through 3600 / 60 / 1 (divide for hours and take the remainder to divide for minutes etc.).