formato - Cómo encontrar el día de la semana en php en una zona horaria específica
strftime php (11)
Estoy confundido al usar php para manejar la fecha / hora.
Lo que trato de hacer es esto: cuando un usuario visita mi página, le pregunto en su zona horaria y luego muestra el ''día de la semana'' en su zona horaria.
No quiero usar el día del navegador. Quiero hacer este cálculo en php.
Así es como estoy tratando de lograrlo:
- La zona horaria ingresada por el usuario
- Marca de tiempo de Unix calculada por la función php time ().
Pero no sé cómo proceder ... ¿Cómo obtendría el ''día de la semana'' en esta zona horaria?
"Día de la semana" es algo que puede obtener directamente de la función php date () con el formato "l" o "N", respectivamente. Eche un vistazo al manual
editar: Lo siento, no leí correctamente las publicaciones de Kalium, él ya me explicó eso. Mi error.
Basado en una de las otras soluciones con una bandera para cambiar entre las semanas que comienzan el domingo o el lunes
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);
}
Creo que esta es la respuesta correcta, simplemente cambie Europe/Stockholm
a la zona horaria de los usuarios.
$dateTime = new /DateTime(
''now'',
new /DateTimeZone(''Europe/Stockholm'')
);
$day = $dateTime->format(''N'');
Representación numérica ISO-8601 del día de la semana (agregado en PHP 5.1.0) 1 (para el lunes) a 7 (para el domingo)
http://php.net/manual/en/function.date.php
Para obtener una lista de zonas horarias compatibles, consulte http://php.net/manual/en/timezones.php
Mi solución es esta:
$tempDate = ''2012-07-10'';
echo date(''l'', strtotime( $tempDate));
La salida es: Tuesday
$tempDate = ''2012-07-10'';
echo date(''D'', strtotime( $tempDate));
La salida es: Tue
Muchas gracias chicos por sus comentarios rápidos.
Esto es lo que usaré ahora. Publicando la función aquí para que alguien pueda usarla.
public function getDayOfWeek($pTimezone)
{
$userDateTimeZone = new DateTimeZone($pTimezone);
$UserDateTime = new DateTime("now", $userDateTimeZone);
$offsetSeconds = $UserDateTime->getOffset();
//echo $offsetSeconds;
return gmdate("l", time() + $offsetSeconds);
}
Informe si encuentra alguna corrección.
Otra forma rápida:
date_default_timezone_set($userTimezone);
echo date("l");
Si puede obtener su desplazamiento de zona horaria, puede agregarlo a la marca de tiempo actual y luego usar la función gmdate para obtener su hora local.
// let''s say they''re in the timezone GMT+10
$theirOffset = 10; // $_GET[''offset''] perhaps?
$offsetSeconds = $theirOffset * 3600;
echo gmdate("l", time() + $offsetSeconds);
La fecha de verificación es el lunes o el domingo antes del último lunes o el último domingo
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);
}
$dw = date( "w", $timestamp);
Donde $ dw será 0 (para el domingo) a 6 (para el sábado) como se puede ver aquí: http://www.php.net/manual/en/function.date.php
$myTimezone = date_default_timezone_get();
date_default_timezone_set($userTimezone);
$userDay = date(''l'', $userTimestamp);
date_default_timezone_set($myTimezone);
Esto debería funcionar (no lo probé, entonces YMMV). Funciona almacenando la zona horaria actual del script, cambiándola por la especificada por el usuario, obteniendo el día de la semana de la función date()
en la marca de tiempo especificada, y luego ajustando la zona horaria del script a lo que era para empezar .
Sin embargo, es posible que tengas algunas aventuras con identificadores de zona horaria.
echo date(''l'', strtotime(''today''));