---
title: "Tidrapport, summera timmar och minuter"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/179928-tidrapport-summera-timmar-och-minuter"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "MickeA.com"
published: "2009-08-23T18:22:17.000Z"
updated: "2009-08-24T07:29:35.000Z"
replies: 11
views: 972
page: 1
pages: 1
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/179928-tidrapport-summera-timmar-och-minuter"
---

# Tidrapport, summera timmar och minuter

## #1 — MickeA.com, 2009-08-23T18:22Z

Hej,

Har ett tidrapporteringssystem och har nu ett problem.
Såhär ställer jag upp datum och tid:

```
Datum		Börjat	Slutat	Total
-------------------------------------
2009-08-23	08:00	09:00	01:00
2009-08-24	08:00	10:30	02:30
2009-08-25	13:00	14:00	01:00
2009-08-26	08:00	09:45	01:45
-------------------------------------
[B]Totalt				05:45[/B]
```

Alla tider sparas som UNIX_TIMESTAMP() i databasen. Nu har jag problem med att beräkna **Totalt**, har försökt på lite olika sätt, men får inte alls till det, jag rör bara ihop det i huvudet.

Så, har någon en bra lösning på det här?

Tack!

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

## #2 — SPiN, 2009-08-23T18:29Z

```
select
    sum(
        subtime(slutat, börjat)
    ) as totalt
from
    tidrapport
where
    user='SPiN'
```

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

## #3 — MickeA.com, 2009-08-23T18:42Z

Hmm, *tot_hours* blir alltid 0, vad kan det bero på? Hur skulle SQL frågan se ut om jag vill ha ut både "radtotal" och "total" direkt i SQL frågan?

```php
$query= "SELECT "
		."a.list_id, a.list_name, a.list_closed, "
		."b.part_id, b.part_start, b.part_end, b.part_desc, "
		."(SELECT SUM(SUBTIME(part_end, part_start)) FROM timereport_part WHERE part_parent = a.list_id) AS tot_hours "
		."FROM timereport_list a "
		."LEFT OUTER "
		."JOIN "
		."timereport_part b "
		."ON a.list_id = b.part_parent "
		."WHERE a.list_id = " . $list_id . " "
		."ORDER BY b.part_id ASC";
```

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

## #4 — MickeA.com, 2009-08-23T18:53Z

Har kört bl.a. den här direkt mot databasen:

```
SELECT
SUM(SUBTIME(FROM_UNIXTIME(part_end, '%Y-%m-%d %H:%i'), FROM_UNIXTIME(part_start, '%Y-%m-%d %H:%i'))) AS total
FROM timereport_part
WHERE part_parent = 1
```

Men får alltid 0 eller *NULL* som resultat. Vad kan det bero på?

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

## #5 — MickeA.com, 2009-08-23T19:12Z

Mkt konstigt.. även det här returnerar *NULL*:

```
SELECT SUM( SUBTIME( '2009-08-23 22:40', '2009-08-23 21:10' ) )
FROM timereport_part
WHERE part_parent = 1
```

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

## #6 — MickeA.com, 2009-08-23T20:07Z

Har gjort ytterligare testar nu:

```
SELECT FROM_UNIXTIME(part_start), FROM_UNIXTIME(part_end), SUBTIME(part_end, part_start) AS DIFF FROM timereport_part WHERE part_parent = 1
```

Ger:

```
[b]FROM_UNIXTIME(part_start) 	FROM_UNIXTIME(part_end) 	DIFF[/b]
2008-12-06 09:30:00 		2008-12-06 13:30:00 		NULL
2008-12-07 09:30:00 		2008-12-07 16:00:00 		NULL
2008-12-12 11:00:00 		2008-12-12 12:00:00 		NULL
2008-12-12 12:30:00 		2008-12-12 14:00:00 		NULL
2008-12-15 20:00:00 		2008-12-15 21:00:00 		NULL
2009-01-24 19:00:00 		2009-01-24 21:00:00 		NULL
2009-01-25 14:00:00 		2009-01-25 15:00:00 		NULL
2009-01-25 15:00:00 		2009-01-25 19:00:00 		NULL
2009-01-26 20:00:00 		2009-01-26 22:00:00 		NULL
2009-02-08 17:30:00 		2009-02-08 20:30:00 		00:00:00
2009-02-10 20:00:00 		2009-02-10 23:00:00 		00:00:00
2009-02-11 21:30:00 		2009-02-11 23:30:00 		00:00:00
2009-02-14 12:00:00 		2009-02-14 17:00:00 		NULL
```

Varför ger vissa *NULL* och andra *00:00:00*?

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

## #7 — SPiN, 2009-08-23T22:15Z

Använder du MySQL? Det finns, om jag kan läsa manualen rätt, ingen datatyp som heter unix_timestamp? Är det enbart datatypen timestamp du menar, möjligtvis?

Nytt försök med date_format();

```
select
    sum(
        subtime(
            date_format(part_end, '%H:%i'),
            date_format(part_start, '%H:%i')
        )
    ) as total
from
    tabell
```

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

## #8 — MickeA.com, 2009-08-24T06:57Z

> **[SPiN skrev:](https://www.webforum.nu/p/1478093)**
>
> Använder du MySQL? Det finns, om jag kan läsa manualen rätt, ingen datatyp som heter unix_timestamp? Är det enbart datatypen timestamp du menar, möjligtvis?

Ledsen om jag var otydlig, datatypen är INT och det som sparas är värdet av time(), skapat med hjälp av MKTIME.

Kollar på ditt exempel snart.

Tack!

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

## #9 — SPiN, 2009-08-24T07:07Z

Det kommer inte att fungera, så det är ingen idé. ;)

Prova istället följande:

```
select
    sum(
        time_to_sec(
            date_format(from_unixtime(slutade), '%Y-%m-%d %H:%i')
        ) - time_to_sec(
            date_format(from_unixtime(började), '%Y-%m-%d %H:%i')
        )
    ) / 3600 as totalt /* det går 3600 sek/h */
from
    tabell
```

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

## #10 — MickeA.com, 2009-08-24T07:16Z

Nuså!

Men, om jag vill visa resultatet som *HH:mm*, hur ska jag göra då? Nu får jag ut rätt antal timmar i decimalform, t.ex. när antalet timmar är *51* så får jag ut *50\.7500*. 

Nu kan jag ju göra t.ex. ceil i PHP för att få 51, men jag vill ha ut antal minuter också.

Tack!

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

## #11 — SPiN, 2009-08-24T07:25Z

Det blir många nästlade funktioner ;)

```
select
    sec_to_time(
        sum(
            time_to_sec(
                date_format(from_unixtime(slutade), '%Y-%m-%d %H:%i')
            ) - time_to_sec(
                date_format(from_unixtime(började), '%Y-%m-%d %H:%i')
            )
        )
    ) as total
from
    tabell
```

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

## #12 — MickeA.com, 2009-08-24T07:29Z

Japp!
Tack ska du ha!

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

---

Tråden på webben: https://www.webforum.nu/amne/php/179928-tidrapport-summera-timmar-och-minuter
