---
title: "Script som räknar dagar _från_ ett datum"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/82668-script-som-räknar-dagar-från-ett-datum"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "silfver"
published: "2003-07-24T09:19:58.000Z"
updated: "2005-06-06T21:08:14.000Z"
replies: 20
views: 837
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/82668-script-som-räknar-dagar-från-ett-datum"
---

# Script som räknar dagar _från_ ett datum

_Sida 1 av 2._

## #1 — silfver, 2003-07-24T09:19Z

Jag vet ju hur man gör en nedräknare i PHP, men hur gör jag om jag vill göra en som fungerar tvärtom? Alltså, jag har ett datum, från det vill jag att den ska räkna ut dagar, timmar gärna minuter och sekunder också om det är möjligt.

mvh

Permalänk: https://www.webforum.nu/p/82668

## #2 — silfver, 2003-07-24T12:49Z

Ingen som vet vad jag snackar om? :P

Permalänk: https://www.webforum.nu/p/1117557

## #3 — Matte, 2003-07-24T13:09Z

Att göra ett skript som räknar ut skillnaden från ett datum, respektive till ett datum måste i princip vara samma sak, så du borde kunna återanvända din kod som du redan har, med en smärre modifiering.

Sen att visa sekunder och minuter.
PHP har redan gjort sitt när sidan kommer till webbläsaren, så vill du att något ska hända med sekunderna på skärmen, så blir det till att använda javascript.

Permalänk: https://www.webforum.nu/p/1117573

## #4 — silfver, 2003-07-24T15:41Z

Allt jag har är denna:

\<? 
$day = 1;     // Day of the countdown 
$month = 8;  // Month of the countdown 
$year = 2003;       // Year of the countdown 
print ("Det är " . (int)((mktime (0,0,0,$month,$day,$year) - time(void))/86400) . " dagar kvar."); 
?\>

Sekunder är inte så viktigt. Inte minuter heller.

Permalänk: https://www.webforum.nu/p/1117631

## #5 — Matte, 2003-07-24T15:59Z

```php
<?php

$day = 22; // Day of the countdown 
$month = 7; // Month of the countdown 
$year = 2003; // Year of the countdown 
print ("Det har gått " . floor((time() - mktime (0,0,0,$month,$day,$year))/86400) . " dagar."); 

?>
```

Permalänk: https://www.webforum.nu/p/1117654

## #6 — silfver, 2003-07-24T16:14Z

Ja den där funkar bra.

Kan man få den att skriva ut veckor istället för dagar, eller månader. Så det blir något i stil med:

2 månader och 3 dagar?

Permalänk: https://www.webforum.nu/p/1117663

## #7 — Matte, 2003-07-24T16:41Z

För länge sedan hjälpte jag någon med ett födelsadagsskript, som gjorde ungefär detta och en hel del till. 
Rensa bort alla rader som sätter variabler som har 'left\_' i indexnamnet, och eventuellt också de variabler som sätter 'year'.
Sen kan du ju byta namn på variabler om du så önskar.

```php
<?php

function calc_age($month,$day,$year) { 
// $month och $day UTAN inledande nollor 
// $year med fyra siffror 

	$age['year'] = date("Y") - $year; 

	$nToday = date("z");
	$nMonth = date("n");
	$nDay = date("j");
	
	$nBirthday = date("z", mktime(1,0,1,$month,$day,date("Y"))); 

	if ($nToday < $nBirthday){
	
		$age['year']--;
		$age['month'] = 12 - $month + $nMonth;
		$age['left_month'] = $month - $nMonth;
		
		if ($day > $nDay){
			$age['month']--;
			$age['days'] = date("z", mktime(1,0,1,$month,$nDay,date("Y"))) - date("z", mktime(1,0,1,$month-1,$day,date("Y")));
			$age['left_days'] = $day - $nDay;
		} else {
			$age['days'] = $nDay - $day;	
			$age['left_month']--;
			$age['left_days'] = date("z", mktime(1,0,1,$month,$day,date("Y"))) - date("z", mktime(1,0,1,$month-1,$nDay,date("Y")));			
		}
	
	} elseif ($nToday > $nBirthday){
		
		$age['month'] = $nMonth - $month;
		$age['left_month'] = 12 - $nMonth + $month;
		
		if ($day > $nDay){
			$age['month']--;
			$age['days'] = date("z", mktime(1,0,1,$nMonth,$nDay,date("Y"))) - date("z", mktime(1,0,1,$nMonth-1,$day,date("Y")));
			$age['left_days'] = $day - $nDay;
		} else {
			$age['days'] = $nDay - $day;	
			$age['left_month']--;
			if ($month > 1){
				$age['left_days'] = date("z", mktime(1,0,1,$month,$day,date("Y"))) - date("z", mktime(1,0,1,$month-1,$nDay,date("Y")));
			} else {
			  $age['left_days'] = date("z", mktime(1,0,1,$month,$day,date("Y"))) + 1 + date("z", mktime(1,0,1,12,31,date("Y"))) - date("z", mktime(1,0,1,12,$nDay,date("Y")));
			}
		}
		
	} else {
		$age['days'] = 0;
		$age['month'] = 0;
		$age['left_month'] = 12;
		$age['left_days'] = 0;
	}

	return $age; 

} // Slut funktion

$age = calc_age(12, 5, 1982);

echo "Du är ".$age['year']." år, ".$age['month']." månader och ".$age['days']." dagar<br>";
echo "Du har ".$age['left_month']." månader och ".$age['left_days']." dagar kvar till nästa födelsedag";

?>
```

Permalänk: https://www.webforum.nu/p/1117678

## #8 — silfver, 2003-07-24T16:50Z

Den där blir så väldigt avancerad. Om jag skriver 20-5-2003, så tror den att jag inte är född ännu...

Permalänk: https://www.webforum.nu/p/1117683

## #9 — Matte, 2003-07-24T17:42Z

5-20-2003 hade kanske gått bättre  :) 

Förstod inte att du ville ha tid som har gått i samma format också.

Då gör vi en lätt modifiering av samma skript så får du bägge delarna.

```php
<?php

function check_date($date) { 
// $date i formatet YYYY-MM-DD

  $year = substr($date, 0, 4);
  $month = (INT)substr($date, 5, 2);
  $day = (INT)substr($date, 8, 2); 

	$check['year'] = date("Y") - $year;
  $check['left_year'] = $year - date("Y"); 

	$nToday = date("z");
	$nMonth = date("n");
	$nDay = date("j");
	
	$nDate = date("z", mktime(1,0,1,$month,$day,date("Y"))); 

	if ($nToday < $nDate){
	
 		$check['year']--;
		$check['month'] = 12 - $month + $nMonth;
		$check['left_month'] = $month - $nMonth;
		
		if ($day > $nDay){
			$check['month']--;
			$check['days'] = date("z", mktime(1,0,1,$month,$nDay,date("Y"))) - date("z", mktime(1,0,1,$month-1,$day,date("Y")));
			$check['left_days'] = $day - $nDay;
		} else {
			$check['days'] = $nDay - $day;	
			$check['left_month']--;
			$check['left_days'] = date("z", mktime(1,0,1,$month,$day,date("Y"))) - date("z", mktime(1,0,1,$month-1,$nDay,date("Y")));			
		}
	
	} elseif ($nToday > $nDate) {
		
 		$check['month'] = $nMonth - $month;
		$check['left_month'] = 12 - $nMonth + $month;
    $check['left_year']--;
		
		if ($day > $nDay){
			$check['month']--;
			$check['days'] = date("z", mktime(1,0,1,$nMonth,$nDay,date("Y"))) - date("z", mktime(1,0,1,$nMonth-1,$day,date("Y")));
			$check['left_days'] = $day - $nDay;
		} else {
			$check['days'] = $nDay - $day;	
			$check['left_month']--;
			if ($month > 1) {
				$check['left_days'] = date("z", mktime(1,0,1,$month,$day,date("Y"))) - date("z", mktime(1,0,1,$month-1,$nDay,date("Y")));
			} else {
			  $check['left_days'] = date("z", mktime(1,0,1,$month,$day,date("Y"))) + 1 + date("z", mktime(1,0,1,12,31,date("Y"))) - date("z", mktime(1,0,1,12,$nDay,date("Y")));
			}
		}
		
	} else {
		$check['days'] = 0;
		$check['month'] = 0;
		$check['left_month'] = 0;
		$check['left_days'] = 0;
	}

//	return $check;
  if ($date > date("Y-m-d")) {
     return "Det är kvar {$check['left_year']} år, {$check['left_month']} månader och {$check['left_days']} dagar";
  } else if ($date < date("Y-m-d")) {
     return "Det har gått {$check['year']} år, {$check['month']} månader och {$check['days']} dagar";
  } else {
     return "Idag är den stora dagen.";
  }

} // Slut funktion

echo check_date("2003-05-20");

?>
```

Hade säkert gått att göra mycket smidigare. Nu finns här stöd för att kunna ta med datum före 1970, 
men då hade jag behövt lägga ner lite arbete på det. 
Du får själv rensa bort om du vill.

Permalänk: https://www.webforum.nu/p/1117721

## #10 — silfver, 2003-07-24T18:07Z

Tack ska du ha, nu funkar det bättre.
Jag är inte så haj på PHP så jag jag vågar inte ta bort onödig kod, men tack ska du ha för hjälpen! :)

Permalänk: https://www.webforum.nu/p/1117736

## #11 — Qimen, 2003-07-24T18:31Z

Nu när vi är innne på en sådan tråd kan jag passa på att fråga en liknande fråga. 

```
<? 
$day = 1;     // Day of the countdown 
$month = 8;  // Month of the countdown 
$year = 2003;       // Year of the countdown 
print ("Det är " . (int)((mktime (0,0,0,$month,$day,$year) - time(void))/86400) . " dagar kvar."); 
?>
```

Koden ovan räknar ju ut hur många dagar det är kvar till ett datum. Skulle man kunna ändra om det litet så att den bara visar timmar och minuter i nedräkning? Har ett datumfält i databasen 2000-01-01 10:00:00 så ex. det är 3 timmar och 15 minuter kvar. :)

Permalänk: https://www.webforum.nu/p/1117747

## #12 — silfver, 2003-07-24T18:34Z

$duration($calc($ctime(January 1 2000 10:00) - $ctime))

Hm. Något med dessa kanske?

Permalänk: https://www.webforum.nu/p/1117751

## #13 — Qimen, 2003-07-24T19:15Z

Nja det datumet kan ändras och står i formatet 2001-01-0-1 00:00:00 menade jag.

Permalänk: https://www.webforum.nu/p/1120614

## #14 — Guldstrand, 2005-05-31T07:18Z

> **Matte skrev:**
>
> ```php
> <?php
> 
> $day = 22; // Day of the countdown 
> $month = 7; // Month of the countdown 
> $year = 2003; // Year of the countdown 
> print ("Det har gått " . floor((time() - mktime (0,0,0,$month,$day,$year))/86400) . " dagar."); 
> 
> ?>
> ```

Jag använder denna kod på min hemsida, men jag skulle gärna vilja visa timmar också.

Hur gör jag det..? :r

Permalänk: https://www.webforum.nu/p/1622158

## #15 — Matte, 2005-05-31T21:16Z

Ett exempel:

```php
$datum = '2003-07-22'; // Underförstått kl 00:00:00. Lägg på tid om du önskar

// Antalet sekunder sedan $datum
$time = time() - strtotime($datum);

// Beräkna dagar, timmar m.m.

$days = floor($time / 86400);

$rest = $time % 86400;
$hours = floor($rest / 3600);

$rest = $rest % 3600;
$minutes = floor($rest / 60);

$seconds = $rest % 60;

// Skriv ut resultatet
echo "
  Det har gått $days dagar, $hours timmar, $minutes minuter 
  och $seconds sekunder sedan $datum.
";
```

Permalänk: https://www.webforum.nu/p/1622451

## #16 — Guldstrand, 2005-05-31T22:07Z

> **Matte skrev:**
>
> Ett exempel:
>
>
> ```php
> $datum = '2003-07-22'; // Underförstått kl 00:00:00. Lägg på tid om du önskar
> 
> // Antalet sekunder sedan $datum
> $time = time() - strtotime($datum);
> 
> 
> // Beräkna dagar, timmar m.m.
> 
> $days = floor($time / 86400);
> 
> $rest = $time % 86400;
> $hours = floor($rest / 3600);
> 
> $rest = $rest % 3600;
> $minutes = floor($rest / 60);
> 
> $seconds = $rest % 60;
> 
> // Skriv ut resultatet
> echo "
>   Det har gått $days dagar, $hours timmar, $minutes minuter 
>   och $seconds sekunder sedan $datum.
> ";
> ```

**Tack!**

Fungerade jättebra...  :birp

Permalänk: https://www.webforum.nu/p/1622465

## #17 — Guldstrand, 2005-06-06T00:27Z

Tydligen så finns det ett litet fel i detta script... :(

Jag valde att göra en nedräkning på 1 vecka, och nu när det är 0 dagar 2 timmar och 19 minuter kvar så börjar minuterna gå uppåt igen istället för att fortsätta neråt. (Svårt att förklara..)

Någon som vet hur jag kan fixa detta?

Permalänk: https://www.webforum.nu/p/1624581

## #18 — Matte, 2005-06-06T06:17Z

Låter mer som om tiden skulle vara fel på servern.

Hur har du tillämpat skriptet ?
Visa kod.

Permalänk: https://www.webforum.nu/p/1624603

## #19 — Guldstrand, 2005-06-06T15:12Z

> **Matte skrev:**
>
> Låter mer som om tiden skulle vara fel på servern.
> 
> Hur har du tillämpat skriptet ?
> Visa kod.

Detta använde jag...

```php
$datum = '2005-06-06'; // Underförstått kl 00:00:00. Lägg på tid om du önskar
// Antalet sekunder sedan $datum
$time = time() - strtotime($datum);
// Beräkna dagar, timmar m.m.
$days = floor($time / 86400);
$rest = $time % 86400;
$hours = floor($rest / 3600);
$rest = $rest % 3600;
$minutes = floor($rest / 60);
$seconds = $rest % 60;
// Skriv ut resultatet
echo "
<br><br>'Det är <b>$days</b> dagar, <b>$hours</b> timmar, <b>$minutes</b> minuter kvar innan tävlingen är avslutad.'<br>Vem blir den lycklige vinnaren?
";

// NEDRÄKNING - END
```

Permalänk: https://www.webforum.nu/p/1624739

## #20 — Matte, 2005-06-06T20:36Z

I och med att du vill ha tid som är kvar får du vända på steken:

```php
$time = strtotime($datum) - time();
```

Permalänk: https://www.webforum.nu/p/1624861

---

Tråden på webben: https://www.webforum.nu/amne/php/82668-script-som-räknar-dagar-från-ett-datum  
Nästa sida: https://www.webforum.nu/amne/php/82668-script-som-räknar-dagar-från-ett-datum/page2.md
