obtener formato fecha español date_format actual php datetime timezone

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:

  1. La zona horaria ingresada por el usuario
  2. 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); }



$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''));