<?php

include 'inc/db.php';

function dateDiff($start, $end) {

$start_ts = strtotime($start);

$end_ts = strtotime($end);

$diff = $end_ts - $start_ts;

return floor($diff / 86400);

}
$q ="SELECT * FROM date";
$p=mysql_query($q);
while ($res=mysql_fetch_array($p))
{
    $start =$res['sdate'];
}
$qc ="SELECT * FROM accounts";
$pc=mysql_query($qc);
while ($r=mysql_fetch_array($pc))
{
    $elecend=$r['elec_contract_edate']; 
    $gasend=$r['gas_contract_edate'];



       $elecshow =dateDiff( $start,$elecend );
       $gasshow =dateDiff( $start,$gasend );
       echo $elecshow."\tDays Remaining";
       echo $gasshow."\tDays Remaining";

}
?>

im getting this output "-15920 Days Remaining 0 Days Remaining8 Days Remaining11 Days Remaining "
i want to eliminate -15920 Days Remaining 0 Days kindly help me out

Recommended Answers

All 7 Replies

Member Avatar

Do you mean you don't want to show just those2 specific values, or nothing below 0?

if ($elecshow > 0){
    echo $elecshow."\tDays Remaining";
}

What are the date values that yield unwanted results?

I am not sure what you want, but I'll suppose that you want to eliminate the first element. If yes, then add:

while($r=mysql_fetch_array($pc) && $i != 0){
....
}

or you can use the limitation in the query

if you want to eliminate the negative number and the zero, then:

while($r=mysql_fetch_array($pc) && dateDiff($r['elec_contract_edate']) > 0){
....
}

thanks bros problem solved by doing this

if ($elecshow > 0){
    echo $elecshow."\tDays Remaining";
}

Great! Click on "mark solved"

Member Avatar

Depending on your situation, cmps' second idea of limiting the values in the query may be a better solution.

My example will still retrieve the 0 and negative values from the database. If you don't need to use these values then you don't need to waste resources by getting them with the query.

Member Avatar

I don't really follow this, but wouldn't something like this do?

SELECT gasdate, elecdate FROM utilities WHERE (FLOOR((gasdate - UNIX_TIMESTAMP())/86400) = 2) OR (FLOOR((elecdate - UNIX_TIMESTAMP())/86400) = 2)

This is assuming that there are 2 columns in the table - gasdate and elecdate
You then still have to check with php because you retrieve both fields even if only one value = 2.

I'd have a slightly different schema:

utility_bills

bill_id (PK)
user_id (FK)
utility_id (FK, e.g. 1 = electricity, 2 = gas)
enddate (int)

utility_types

utype_id (PK)
utility_type (varchar, e.g. electricity, gas)

$qualifier = '= 2'; // >2 or >=2 or you can use BETWEEN ... AND ... etc.

$q = "SELECT b.bill_id, t.utility_type, FROM_UNIXTIME(b.enddate, '%M %D, %Y') AS enddt, FLOOR((b.enddate - UNIX_TIMESTAMP())/86400) AS to_days FROM utility_bills AS b INNER JOIN utility_types AS t ON b.utility_id = t.utype_id HAVING to_days $qualifier"; 

You could order the results according to your needs, e.g. all electicity ones first etc, Just a thought. NOT TESTED.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.