Je suis confus lors de l'utilisation de php pour gérer la date/heure.
Voici ce que j'essaie de faire: lorsqu'un utilisateur visite ma page, je lui demande son fuseau horaire puis affiche le "jour de la semaine" dans son fuseau horaire.
Je ne veux pas utiliser le jour du navigateur. Je veux faire ce calcul en php.
Voici comment j'essaie d'y parvenir:
Mais je ne sais pas comment procéder ... Comment pourrais-je obtenir le "jour de la semaine" dans ce fuseau horaire.
$dw = date( "w", $timestamp);
Où $ dw sera 0 (pour dimanche) à 6 (pour samedi) comme vous pouvez le voir ici: http://www.php.net/manual/en/function.date.php
Ma solution est la suivante:
$tempDate = '2012-07-10';
echo date('l', strtotime( $tempDate));
La sortie est: Tuesday
$tempDate = '2012-07-10';
echo date('D', strtotime( $tempDate));
La sortie est: Tue
Merci beaucoup les gars pour vos commentaires rapides.
C'est ce que je vais utiliser maintenant. Afficher la fonction ici pour que quelqu'un puisse l'utiliser.
public function getDayOfWeek($pTimezone)
{
$userDateTimeZone = new DateTimeZone($pTimezone);
$UserDateTime = new DateTime("now", $userDateTimeZone);
$offsetSeconds = $UserDateTime->getOffset();
//echo $offsetSeconds;
return gmdate("l", time() + $offsetSeconds);
}
Signaler si vous trouvez des corrections.
Je pense que c'est la bonne réponse, changez simplement Europe/Stockholm
au fuseau horaire des utilisateurs.
$dateTime = new \DateTime(
'now',
new \DateTimeZone('Europe/Stockholm')
);
$day = $dateTime->format('N');
Représentation numérique ISO-8601 du jour de la semaine (ajouté de PHP 5.1.0)) 1 (du lundi) à 7 (du dimanche)
http://php.net/manual/en/function.date.php
Pour obtenir une liste des fuseaux horaires pris en charge, voir http://php.net/manual/en/timezones.php
Un autre moyen rapide:
date_default_timezone_set($userTimezone);
echo date("l");
Si vous pouvez obtenir un décalage de fuseau horaire, vous pouvez simplement l'ajouter à l'horodatage actuel, puis utiliser la fonction gmdate pour obtenir leur heure locale.
// let's say they're in the timezone GMT+10
$theirOffset = 10; // $_GET['offset'] perhaps?
$offsetSeconds = $theirOffset * 3600;
echo gmdate("l", time() + $offsetSeconds);
$myTimezone = date_default_timezone_get();
date_default_timezone_set($userTimezone);
$userDay = date('l', $userTimestamp);
date_default_timezone_set($myTimezone);
Cela devrait fonctionner (ne l’a pas testé, donc YMMV). Cela fonctionne en stockant le fuseau horaire actuel du script, en le changeant en celui spécifié par l'utilisateur, en obtenant le jour de la semaine à partir de la fonction date()
à l'horodatage spécifié, puis en rétablissant le timezone du script. était pour commencer.
Vous pourriez cependant avoir quelques aventures avec des identifiants de fuseau horaire.
"Jour de la semaine" est en fait quelque chose que vous pouvez obtenir directement à partir de la fonction php date () avec le format "l" ou "N" respectivement. Regardez le manuel
edit: Désolé, je n'ai pas lu correctement les posts de Kalium, il l'a déjà expliqué. Ma faute.
Basé sur l'une des autres solutions avec un drapeau pour basculer entre les semaines commençant le dimanche ou le lundi
function getWeekForDate($date, $weekStartSunday = false){
$timestamp = strtotime($date);
// Week starts on Sunday
if($weekStartSunday){
$start = (date("D", $timestamp) == 'Sun') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Last Sunday', $timestamp));
$end = (date("D", $timestamp) == 'Sat') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Next Saturday', $timestamp));
} else { // Week starts on Monday
$start = (date("D", $timestamp) == 'Mon') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Last Monday', $timestamp));
$end = (date("D", $timestamp) == 'Sun') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Next Sunday', $timestamp));
}
return array('start' => $start, 'end' => $end);
}
La date de contrôle est le lundi ou le dimanche avant le dernier lundi ou le dernier dimanche
public function getWeek($date){
$date_stamp = strtotime(date('Y-m-d', strtotime($date)));
//check date is sunday or monday
$stamp = date('l', $date_stamp);
$timestamp = strtotime($date);
//start week
if(date('D', $timestamp) == 'Mon'){
$week_start = $date;
}else{
$week_start = date('Y-m-d', strtotime('Last Monday', $date_stamp));
}
//end week
if($stamp == 'Sunday'){
$week_end = $date;
}else{
$week_end = date('Y-m-d', strtotime('Next Sunday', $date_stamp));
}
return array($week_start, $week_end);
}