Passer au contenu principal
whatweek.ca

Voyez en direct quelle semaine de l’année nous sommes au Canada, avec le numéro de semaine actuel et les dates de début et de fin de la semaine.

Numéro de semaine ISO 8601 — extraits de code

15 langages, prêts à coller. Calculez le numéro de semaine ISO 8601 et l'année-semaine ISO en JavaScript, Python, SQL, Excel, et plus.

JavaScript

ECMAScript pur, sans dépendance. Retourne 1–53.

function isoWeek(date) {
  const d = new Date(Date.UTC(
    date.getFullYear(),
    date.getMonth(),
    date.getDate(),
  ));
  // Thursday in current week decides the year.
  d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));
  const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
  return Math.ceil(((d - yearStart) / 86400000 + 1) / 7);
}

console.log(isoWeek(new Date())); // current ISO week number

TypeScript (Intl-aware)

Retourne le numéro de semaine ISO et l'année-semaine ISO.

// Intl.DateTimeFormat doesn't expose ISO weeks; use the formula above.
export function isoWeek(date: Date): number {
  const d = new Date(Date.UTC(
    date.getFullYear(),
    date.getMonth(),
    date.getDate(),
  ));
  d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));
  const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
  return Math.ceil(((d.getTime() - yearStart.getTime()) / 86_400_000 + 1) / 7);
}

export function isoWeekYear(date: Date): number {
  const d = new Date(Date.UTC(
    date.getFullYear(),
    date.getMonth(),
    date.getDate(),
  ));
  d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));
  return d.getUTCFullYear();
}

Python

isocalendar() retourne un tuple ISO 8601 (année, semaine, jour) depuis Python 3.9.

from datetime import date

# Python 3.9+: date.isocalendar() returns a named tuple
year, week, weekday = date.today().isocalendar()
print(f"{year}-W{week:02d}-{weekday}")

PHP

DateTime::format avec `o` (année ISO) et `W` (semaine ISO).

<?php
$today = new DateTime("now", new DateTimeZone("America/Toronto"));
echo $today->format("o-\WW"); // ISO week-year + ISO week, e.g. 2026-W18

Java

java.time.WeekFields.ISO est l'accesseur conforme à la norme.

import java.time.LocalDate;
import java.time.temporal.WeekFields;

LocalDate today = LocalDate.now();
int week = today.get(WeekFields.ISO.weekOfWeekBasedYear());
int year = today.get(WeekFields.ISO.weekBasedYear());
System.out.printf("%d-W%02d%n", year, week);

C#

System.Globalization.ISOWeek (.NET Core 3.0+).

using System.Globalization;

var today = DateTime.UtcNow;
int week = ISOWeek.GetWeekOfYear(today);
int year = ISOWeek.GetYear(today);
Console.WriteLine($"{year}-W{week:D2}");

Go

time.Time.ISOWeek retourne (année, semaine) selon ISO 8601.

package main

import (
  "fmt"
  "time"
)

func main() {
  year, week := time.Now().UTC().ISOWeek()
  fmt.Printf("%d-W%02d\n", year, week)
}

Rust (chrono)

chrono::NaiveDate::iso_week retourne la semaine ISO.

use chrono::{Datelike, Utc};

fn main() {
  let now = Utc::now().date_naive();
  let iso = now.iso_week();
  println!("{}-W{:02}", iso.year(), iso.week());
}

Ruby

Date#cweek et Date#cwyear (norme ISO 8601).

require "date"
puts Date.today.cweek  # ISO 8601 week number
puts Date.today.cwyear # ISO 8601 week-year

PostgreSQL

Postgres EXTRACT WEEK suit ISO 8601 par défaut.

SELECT
  EXTRACT(ISOYEAR  FROM CURRENT_DATE) AS iso_year,
  EXTRACT(WEEK    FROM CURRENT_DATE) AS iso_week;

MySQL / MariaDB

Mode 3 force ISO 8601 (sem. 1 = première avec au moins 4 jours).

SELECT
  YEARWEEK(CURRENT_DATE, 3) AS iso_year_week, -- mode 3 = ISO 8601
  WEEK(CURRENT_DATE, 3)     AS iso_week;

SQL Server (T-SQL)

DATEPART(ISO_WEEK, ...) ajouté à SQL Server 2008.

SELECT
  DATEPART(ISO_WEEK, GETUTCDATE()) AS iso_week,
  DATEPART(YEAR, DATEADD(DAY, 26 - DATEPART(ISO_WEEK, GETUTCDATE()), GETUTCDATE())) AS iso_year;

BigQuery / Standard SQL

ISOWEEK / ISOYEAR du SQL standard.

SELECT
  EXTRACT(ISOWEEK FROM CURRENT_DATE())     AS iso_week,
  EXTRACT(ISOYEAR FROM CURRENT_DATE())     AS iso_year;

Excel

Excel 2013+ inclut ISOWEEKNUM. Versions antérieures: formule manuelle.

=ISOWEEKNUM(TODAY())
=YEAR(TODAY()-WEEKDAY(TODAY(),3)+3)  ' ISO week-year
="W" & TEXT(ISOWEEKNUM(TODAY()),"00")

Google Sheets

ISOWEEKNUM pris en charge nativement.

=ISOWEEKNUM(TODAY())
=YEAR(TODAY()-WEEKDAY(TODAY(),3)+3)

Questions fréquentes

Pourquoi ISO 8601 plutôt qu'un autre système ?

ISO 8601 est la norme internationale pour les numéros de semaine. Il définit clairement quand une semaine commence (lundi) et comment compter la semaine 1.

Quels langages prennent en charge ISO 8601 nativement ?

Java, C# (>= .NET Core 3), Python (>= 3.9), Go, Ruby, Rust avec chrono, et la plupart des SGBD modernes (Postgres, MySQL avec mode 3, SQL Server 2008+, BigQuery).

Excel donne-t-il le bon numéro de semaine ?

Excel WEEKNUM utilise par défaut le système américain. Utilisez ISOWEEKNUM (Excel 2013+) ou la formule lundi-jeudi pour obtenir le résultat ISO 8601.