Avatar billede coolmlj Nybegynder
31. juli 2008 - 10:26 Der er 8 kommentarer

hjælp til dato tjek

Jeg hiver en masse datoer ud fra en MSSQL database.
Disse smider jeg så ud via $row

Jeg vil gerne i dato feltet, i den tabel jeg printer det hele ud i, kunne lave et tjek der tjekker om datoen er mere end en uge gammel = farven i feltet bliver gult, mere end 1 md gammel = farven bliver rød..

Feltet i databasen er af typen DATETIME (2008-07-31-16:15:29.527)

Håber nogen kan hjælpe da jeg lige er gået helt død....
Avatar billede zynzz Praktikant
31. juli 2008 - 11:06 #1
Prøv følgende:
<?php
while($row = mysql_fetch_array($NOGET)) {

// Sekunder på en uge
$SEKuge = 604800+$row['dato'];

// Sekunder på en måned (31 dage)
$SEKmaaned = 2678400+$row['dato'];

// Hvis ældre end en måned
if ($SEKmaaned < time()) {
$farve = "#FF0000";
}

// Hvis ældre end en uge
if ($SEKuge < time()) {
$farve = "#FFFF00";
}


}
?>
Avatar billede coolmlj Nybegynder
31. juli 2008 - 11:19 #2
Virker ikke lige, den skriver kun farven #FFFF00.
Vedlægger lige kildekoden så folk bedre kan se.

// connection to the database
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
    or die("Couldn't connect to SQL Server on $myServer");

// select a database to work with
$selected = mssql_select_db($myDB, $dbhandle)
    or die("Couldn't open database $myDB");

echo "You are connected to the " . $myDB . " database on the " . $myServer . ".";

$query="select dbo.t_reg_cases.id, user_id, addr_company, description, create_date, create_user, close_date from dbo.t_reg_cases , dbo.t_users  where close_date IS NULL AND
dbo.t_reg_cases.user_id = dbo.t_users.id  ORDER BY create_date DESC";
$result=mssql_query($query);

echo"

<table width=100% border=1>
  <tr>
    <td>Sags nr </td>
    <td>Kunde</td>
    <td>oprettet</td>
    <td>problem</td>
    <td>konsulent</td>
    <td>timer</td>
  </tr>";




while($row=mssql_fetch_assoc($result))
{
// Sekunder på en uge
$SEKuge = 604800+$row[create_date];
// Sekunder på en måned (31 dage)
$SEKmaaned = 2678400+$row[create_date];
// Hvis ældre end en måned
if ($SEKmaaned < time())
{
$farve = "#FF0000";
}
// Hvis ældre end en uge
if ($SEKuge < time())
{
$farve = "#FFFF00";
}


echo " <tr>
    <td>$row[id] </td>
    <td>$row[addr_company] </td>
    <td>$row[create_date] </td>
    <td>$row[description] </td>
    <td>$row[create_user] </td>
    <td>$farve </td>
  </tr>



";
}
echo"</table>";
// close the connection
mssql_close($dbhandle);
?>
Avatar billede coolmlj Nybegynder
31. juli 2008 - 11:20 #3
Hvis jeg henter data ud fra "CREATE_DATE" ser data sådan ud:

2008-07-30 16:15:29.527
Avatar billede coolmlj Nybegynder
31. juli 2008 - 11:45 #4
Der må være en måde tjekke på?

Kan man evt ændre datoen til noget unix time, og bruge dette til at sammenligne med?
Avatar billede repox Seniormester
31. juli 2008 - 13:43 #5
Smid denne funktion ind i toppen af koden:
    function getCasetimeColor($timestamp)
    {
        $timestamp = strtotime($timestamp);
        $difference = time() - $timestamp;
        $times[(60*60*24*31)] = "#FF0000"; //en måned
        $times[(60*60*24*7)] = "#FFFF00"; // en uge

        krsort($times);

        foreach($times as $key => $value)
        {
            if($difference >= $key)
            {
                return $value;
                break;
            }
        }

        return "#000000";
    }

Så gør du således:
while($row=mssql_fetch_assoc($result))
{
$farve = getCasetimeColor($row["create_date"]);

echo " <tr>
    <td>".$row["id"]."</td>
    <td>".$row["addr_company"]."</td>
    <td>".$row["create_date"]."</td>
    <td>".$row["description"]."</td>
    <td>".$row["create_user"]."</td>
    <td>".$farve."</td>
  </tr>



";
}
Avatar billede zynzz Praktikant
31. juli 2008 - 14:33 #6
Brug funktionen strtotime() så og kør din $row['dato'] gennem den...
Avatar billede showsource Seniormester
31. juli 2008 - 20:50 #7
$month = strtotime("-1 month");
$week = strtotime("-1 week");

while($row=mssql_fetch_assoc($result))

{

    $dato = strtotime($row["create_date"]);

    if($dato < $week) {

        if($dato < $month) {
        $farve = "#FF0000";
        }else{
        $farve = "#FFFF00";
        }

    }else{
    $farve = "#000000";
    }

echo $farve."<br />";

}
Avatar billede showsource Seniormester
31. juli 2008 - 20:55 #8
Hov, ser først nu at du åbenbart gemmer dato som unixtimestamp !
Eller hvad ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester