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?
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".
$week
: le numéro de semaine$year
: le numéro de l'annéeEnsuite:
$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.
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.