---
title: "Problem med veckonummer!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/124759-problem-med-veckonummer"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "learn"
published: "2005-03-20T12:37:17.000Z"
updated: "2005-03-20T18:13:27.000Z"
replies: 9
views: 504
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/124759-problem-med-veckonummer"
---

# Problem med veckonummer!

## #1 — learn, 2005-03-20T12:37Z

Jag har stött på ett problem med veckonummerhanteringen i mitt kalenderscript. Man ska kunna hoppa mellan olika veckor. Problemet är att antalet veckor ett år kan variera mellan 52 och 53.

> **Susning skrev:**
>
> Veckorna numreras från början av året, men reglerna skiljer sig lite åt i olika länder för hur veckorna skall numreras. I Sverige blir den första veckan av vilken minst 4 dagar hamnar inom det nya året vecka 1. Sista veckan kan bli nummer 52 eller 53. Sverige följer med andra ord gällande ISO-standard för veckonummer, ISO 8601:1988.

 

Hur skall jag ta reda på hur många veckor det finns ett givet år??

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

## #2 — jOOOL, 2005-03-20T13:17Z

<http://se.php.net/manual/en/function.date.php>

använd date('W') för att få fram vilken vecka det är. Det ska ta fram veckan enligt ISO-8601.

W ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0) Example: 42 (the 42nd week in the year)

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

## #3 — learn, 2005-03-20T13:19Z

Jojo, men hur får jag fram ANTALET veckor ett givet år?

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

## #4 — Peeer, 2005-03-20T13:23Z

```php
<?php
echo date('W',strtotime(date('Y'). '-12-31'));
?>
```

 Har dock för mig att jag sett en smidigare lösning någonstans.

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

## #5 — learn, 2005-03-20T13:41Z

ok, tackar! ska testa mig fram lite

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

## #6 — dectgap, 2005-03-20T17:38Z

> **Peeer skrev:**
>
> ```php
> <?php
> echo date('W',strtotime(date('Y'). '-12-31'));
> ?>
> ```
>
>  Har dock för mig att jag sett en smidigare lösning någonstans.

Fast det är möjligt att den sista december tillhör vecka 1 på efterföljande år.

Här är en JavaScript-lösning:
<http://www.webforum.nu/showthread.php?s=&forumid=24&threadid=120516>

Omskrivet till PHP:

```php
function weeksInYear($yearNum) {
	$firstDay = mktime(0,0,0,1,1,$yearNum);   // 1 januari
	$lastDay  = mktime(0,0,0,11,31,$yearNum); // 31 december

	$firstDayWeekDay = date('w', $firstDay); // Veckodag, där 0=sön, 1=mån, 2=tis, o.s.v.
	$lastDayWeekDay  = date('w', $lastDay);

	return ($firstDayWeekDay == 4 || $lastDayWeekDay == 4) ? 53 : 52;
}
```

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

## #7 — learn, 2005-03-20T17:45Z

tack för engagemanget men det funkar inte som det ska. Enligt funktionen så har år 2005 53 veckor... stämmer inte, ska vara 52..

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

## #8 — fiddler, 2005-03-20T17:52Z

Nyfiken som man är: Vad ska du ha funktionen till?

red/ Tar tillbaka frågan, läste lite nogrannare i ditt första inlägg...  :r

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

## #9 — learn, 2005-03-20T17:55Z

Läs inledningen till tråden. För att kunna hoppa mellan december och januari så måste jag veta hur många veckor det gångna året innehåller... om du förstår...  ;)

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

## #10 — dectgap, 2005-03-20T18:13Z

Det blev något fel vid översättningen från JavaScript till PHP, för enligt JavaScript-funktionen har år 2005 endast 52 veckor.

Och nu hittade jag felet.
Rätt ska vara:

```php
function weeksInYear($yearNum) {
	$firstDay = mktime(0,0,0,1,1,$yearNum);   // 1 januari
	$lastDay  = mktime(0,0,0,12,31,$yearNum); // 31 december

	$firstDayWeekDay = date('w', $firstDay); // Veckodag, där 0=sön, 1=mån, 2=tis, o.s.v.
	$lastDayWeekDay  = date('w', $lastDay);

	return ($firstDayWeekDay == 4 || $lastDayWeekDay == 4) ? 53 : 52;
}
```

Felet låg på andra raden inuti funktionen.

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

---

Tråden på webben: https://www.webforum.nu/amne/php/124759-problem-med-veckonummer
