web-dev-qa-db-fra.com

Comment convertir le numéro de semaine et l'année en timestamp Unix?

J'essaie de regrouper les dates dans un numéro de semaine et une année, puis je veux reconvertir ce numéro de semaine en un horodatage Unix. Comment puis-je m'y prendre?

28
blacktie24

Je suppose que vous utilisez les numéros de semaine ISO 8601 et que vous voulez le premier jour d’une semaine ISO 8601 afin que, par exemple, Week 1 of 2011 renvoie January 3 2011

strtotime peut le faire en utilisant le format {YYYY}W{WW}:

echo date("Y-m-d", strtotime("2011W01")); // 2011-01-03

Notez que le numéro de semaine doit être deux chiffres.

Honteusement, DateTime::createFromFormat, le nouveau moyen élégant PHP 5 de traiter les dates, semble incapable d'analyser ce type d'informations - il n'a pas d'espace réservé "week".

82
Pekka 웃
  • $week: le numéro de semaine
  • $year: le numéro de l'année

Ensuite:

$timestamp = gmmktime (0, 0 , 0 , 1, , 4 + 7*($week - 1), $year);

4 + 7*($week - 1) vient du fait que selon ISO 8601 , la première semaine de l'année est celle qui contient le 4 janvier.

2
Oswald

strtotime('1/1/2011 + 4 weeks') (1/1 est toujours la première semaine; ceci m'amènerait à la cinquième semaine). si vous voulez n’importe quel horodatage de la semaine, c’est tout ce dont vous avez besoin, sinon vous devez vous rendre au lundi de cette semaine:

$t = strtotime('1/1/2011 + 4 weeks');
$t -=  24 * 60 * 60 * date('w', $t);

Mise à jour : au lieu de 1/1/2011, utilisez le premier lundi de 2011. Le deuxième calcul n'est plus nécessaire.

0
Florian