webForumDet fria alternativet

date-diff-funktion

6 svar · 270 visningar · startad av bassebhu

bassebhuMedlem sedan nov. 20016 480 inlägg
#1

Hej alla glada!

Jag har en databas med massa händelser som ska inträffa eller har inträffat.
När jag loopar ut dessa händelser vill jag att det ska stå hur lång tid det är till den inträffar/inträffade. De valen som jag vill ska vara möjliga är:

* I går kl. XX:XX
* I dag om X timmar och X min
* I morgon kl. XX:XX
* X månad XX:XX

Den sista tar alltså upp allt som inte faller in under de andra tre där månad blir månadsnamnet (januari, februari osv). t ex 3 maj 12:00

Jag har hållt på i snart 2 timmar och pillat med funktioner och sökt både här och på php-portalen utan att hitta något som är likt det jag vill åt. Jag tycker att det inte borde vara så svårt egentligen. Finns det ingen date_diff()-funktion i php som man enkelt kollar av detta med? Om det är för mycket att hjälpa med - skriv ner några hints. Det fält som ska hämtas från mysql-databasen är för övrigt datetime och ligger som t ex: 2005-01-01 12:00:00

Tackar för all hjälp!

pimmeMedlem sedan sep. 20011 086 inlägg
#2

Det (enligt mig) lättaste sättet att kolla om ett datum är idag,igår eller imorgon är att göra om datumet till ett unix timestamp och sen lite lekande med mktime(), strtotime() och liknande funktioner.

bassebhuMedlem sedan nov. 20016 480 inlägg
#3

"unix timestamp" = ?

Du menar göra om datumen till typ sekunder och subtrahera för att sedan pussla ihop skillnaden igen? Finns det inget smidigare sätt så blir jag förvånad.

pimmeMedlem sedan sep. 20011 086 inlägg
#4

bassebhu skrev:

"unix timestamp" = ?

Du menar göra om datumen till typ sekunder och subtrahera för att sedan pussla ihop skillnaden igen?

Ja, så menar jag.

bassebhuMedlem sedan nov. 20016 480 inlägg
#5

det var inte det smidigaste jag har hört. jag provar helt enkelt. har att göra hela dan nu haha.

bassebhuMedlem sedan nov. 20016 480 inlägg
#6

Jag förenklade min funktion lite och nöjde mig med följande:

I dag kl. 12:00
I morgon kl. 12:00
I går kl. 12:00
10 maj kl. 12:00

Då blev det mycket enklare och samtidigt snällare kod.

Det verkar funka, men finns det nåt jag kan skriva mer optimerat?

function date_diff($current,$past) {
   $diffSeconds = strtotime($current) - strtotime($past);   
   $diffMinutes = $diffSeconds/60;
   $diffHours = $diffMinutes/60;
   $diffDays = floor($diffHours/24);
   return $diffDays;
}

$monthSearch = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$monthReplace = array("januari", "februari", "mars", "april", "maj", "juni", "juli", "augusti", "september", "oktober", "november", "december");

// [....]

$nowDate = date('Y-m-d');
while($row = mysql_fetch_array($result)) {

	$itemsStart = strtotime($row["itemsStart"]);

	$startDate = date("Y-m-d", $itemsStart);
	$startDiff = date_diff($startDate,$nowDate);
	if($startDiff == 0) {
		$itemsStartValue = "I dag kl. " . date("H:i", $itemsStart);
	} elseif($startDiff == 1) {
		$itemsStartValue = "I morgon kl. " . date("H:i", $itemsStart);
	} elseif($startDiff == -1) {
		$itemsStartValue = "I går kl. " . date("H:i", $itemsStart);
	} else {
		$itemsStartValue = str_replace($monthSearch, $monthReplace, date("j M H:i", $itemsStart));
	}

	echo $itemsStartValue;
}

Bör jag skriva "I dag" eller "Idag" osv förresten? Vill vara konsekvent, men vad är mest korrekt hehe?

jOOOLMedlem sedan sep. 200436 inlägg
#7

Idag heter det... :)

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)