webForumDet fria alternativet

Skillnaden mellan två datum

PHP

11 svar · 584 visningar · startad av Tulork

Medlem sedan aug. 2004903 inlägg
Frågan#1

Är ute efter en liten funktion som på ett smart sätt kollar en variabel som innehåller ett datum och sen kolla hur många dagar det gått från variablens datum till dagens datum.

Min variabel innehåller följande datumformat och kommer från databasen.

$datum = "2007.07.25";

Vad jag då vill är att när dagens datum blir "2007.08.24" dvs 30 dagar senare, ska en funktion aktiveras.

När detta väl är klart undrar jag om man kan på något sätt lägga en lååång refresh i ett skript, eller om det finns något annat vettigare sätt att skriptet självkörs.

Medlem sedan juli 20033 147 inlägg
#2
function DateDiff ($to) {

   $nto = explode('.', $to);
   $nto = $nto[0].'-'.$nto[1].'-'.$nto[2];

   $sec = strtotime($nto) - strtotime(date("Y-m-d"));
   $days = round($sec / 86400);
   
   return $days;

}

if (DateDiff('2007.08.24') > 30) {

   // anropa något?
   
   echo '   
   <meta HTTP-EQUIV="refresh" CONTENT="5"> 
   <meta HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
   ';

}

Otestat, och det finns säkert någon enklare funktion, men den här borde göra susen för dig. :p

Medlem sedan aug. 2004903 inlägg
#3

underbart.. dock så funkar det inte riktigt som det ska än, och jag vet inte varför.

så här ser det ut

<?php
include("conn.php");

function DateDiff ($from, $to) {

	$nfrom = explode('.', $from);
	$nfrom = $nfrom[0].'-'.$nfrom[1].'-'.$nfrom[2];

	$nto = explode('.',$to);
	$nto = $into[0].'-'.$nto[1].'-'.$nto[2];

 	$sec = strtotime($nto) - strtotime($nfrom);
	$days = round($sec / 86400);

	return $days;
}

$doit = "SELECT date FROM annons WHERE aktiv ='1'";
$now = mysql_query($doit) or die ('Ett fel har uppstått');

while($row = mysql_fetch_array($now, MYSQL_ASSOC)) {

$annonstid = $row['date'];

$days = DateDiff($annonstid, $date);
if ($days > 30){

$doit2 = "DELETE FROM annons WHERE date ='$annonstid'";
$now2 = mysql_query($doit2) or die ('Ett fel har uppstått2');

}

}

variablen $date finns i conn.php och set ut så här

$date= date("Y.m.d");
Medlem sedan juli 20033 147 inlägg
#4

Jag har gjort en liten uppdatering.

<?php
include("conn.php");

function DateDiff ($to) {

   $nto = explode('.', $to);
   $nto = $nto[0].'-'.$nto[1].'-'.$nto[2];

   $sec = strtotime($nto) - strtotime(date("Y-m-d"));
   $days = round($sec / 86400);
   
   return $days;

}

$doit = "SELECT date FROM annons WHERE aktiv ='1'";
$now = mysql_query($doit) or die ('Ett fel har uppstått');

while($row = mysql_fetch_array($now, MYSQL_ASSOC)) {

$annonstid = $row['date'];

if (DateDiff($annonstid) > 30) {

   $doit2 = "DELETE FROM annons WHERE date ='$annonstid'";
   $now2 = mysql_query($doit2) or die ('Ett fel har uppstått2');

}

}
Medlem sedan aug. 2004903 inlägg
#5

underbart! funkar prima nu. Tack ska du ha.

En sista fråga.

Hur gör jag för att detta skriptet ska köra sig själv typ en gång om dagen 01.00 på natten.

Medlem sedan juli 20033 147 inlägg
#6

Du menar att sidan ska vara uppe 24 / 7 och att den här koden ska uppdatera sig en gång per dygn?

Medlem sedan aug. 2004903 inlägg
#7

aa, alltså teoretiskt, hur ska jag fixa så att scriptet körs en gång per dygn, utan att jag behöver ställa klockan :)

Medlem sedan juli 20033 147 inlägg
#8

Läste just igenom din kod och såg vad den gjorde. Allt skulle kunna göras enormt mycket enklare. :)

mysql_query("delete from annons where date < subdate(now(),interval 30 day) and aktiv = 1") or die('Ett fel har uppstått');

Kör den här SQL-frågan varje gång sidan laddas så löser det alla dina problem. :)

Medlem sedan aug. 2004903 inlägg
#9

haha lol, måste testa den :)

Medlem sedan aug. 2004903 inlägg
#10

funkar inte :( ingenting tas bort

Medlem sedan mars 20025 907 inlägg
#11
 mysql_query("delete from annons where datediff(now(), date) > 30 and aktiv = 1") or die('Ett fel har uppstått');

Att göra så scriptet körs regelbundet löser du lättast mha crontab alternativt schemaläggaren. Att ha en browser som refreshar i scriptet är bara dumt.

Medlem sedan aug. 2004903 inlägg
#12

Löste det med schemaläggning. Om den skulle krångla på nått sätt och jag inte är i närheten av en dator eller nått så kan jag aktivera skriptet genom att skicka ett litet sms :)

352 ms totalt · 4 externa anrop · v20260731065814-full.868a69e5
136 ms — deklarationer (db)
0 ms — hämta statistik (cache)
214 ms — hämta tråd, inlägg och bilagor (db)
134 ms — ändringar (db)