new - php datetime get day
PHP: la semana comienza el lunes, pero "el lunes esta semana" un domingo se recibe el lunes la semana próxima (10)
Aquí hay un resumen del problema: los domingos, strtotime(''this week'')
devuelve el inicio de la próxima semana.
En PHP, la semana parece comenzar el lunes. Pero, en cualquier día excepto el domingo, este código
echo date(''Y-m-d'', strtotime(''monday this week'', strtotime(''last sunday'')));
Da salida a la fecha del lunes de esta semana, cuando parece que debería salir las últimas semanas el lunes. Parece que, en este caso, PHP trata el domingo y el lunes como el comienzo de la semana. Ahora es lunes, 10 de diciembre de 2012 o 2012-12-10. date(''Ym-d'', strtotime(''sunday last week''))
returns 2012-12-09
- ayer.
¿Es esto un error, o me estoy perdiendo algo? Parece que un error así de obvio debería ser bastante conocido, pero no puedo encontrar nada al respecto. ¿Es la única manera de comenzar la semana de usar un manejo especial para los domingos?
$week_offset = (int) ''sunday'' == date(''l'');
$week_start = strtotime("-$week_offset monday"); // 1 or 0 Mondays ago
Así es como puedes obtener el lunes de la semana actual:
echo date("Y-m-d", strtotime(date(''o-//WW'')));
Basado en la respuesta de Bryant :
$first_week_date = date(''d F Y'', strtotime(''next Monday -1 week'', strtotime(''this sunday'')));
$last_week_date = date(''d F Y'', strtotime(''next Monday -1 week + 6 days'', strtotime(''this sunday'')));
Creo que en vez de intentar
echo date(''Y-m-d'', strtotime(''monday this week'', strtotime(''last sunday'')));
Deberías intentarlo
echo date(''Y-m-d'', strtotime(''monday last week''));
Esta respuesta es tarde, pero es algo con lo que he estado luchando. Cada solución que he probado hasta ahora ha funcionado mal por una razón u otra. Esto es con lo que terminé y que funcionó para mí. (aunque puede parecer bonito, al menos funciona).
$thisMonday = strtotime(''next Monday -1 week'', strtotime(''this sunday''));
Esto es para aquellos que buscan una solución amigable que funcione con cualquier día.
function getWeekStart($week_start_day = "Monday") {
$week_days = array("Sunday"=>0,"Monday"=>1,"Tuesday"=>2,"Wednesday"=>3,"Thursday"=>4,"Friday"=>5,"Saturday"=>6,);
if(!isset($week_days[$week_start_day])) {
return false;
} else {
$start_day = $week_days[$week_start_day];
$today = date("w");
$one_day = (60 * 60 * 24);
if($today < $start_day) {
$days_difference = 7 - ($start_day - $today);
} else {
$days_difference = ($today - $start_day);
}
$week_starts = strtotime(date("Y-m-d 00:00:00")) - ($one_day * $days_difference);
return $week_starts;
}
}
//Test: If today is Monday, it will return today''s date
echo date("Y-m-d H:i:s", getWeekStart("Monday"));
No es ideal, pero esto es lo que recurrí al uso:
if(date(''N'') == 7) {
$date = date(''Y-m-d'',strtotime(''monday last week''));
} else {
$date = date(''Y-m-d'',strtotime(''monday this week''));
}
Por lo que puedo decir, este es un error. No veo ninguna razón lógica por la cual strtotime(''this week'');
debería devolver una fecha futura. Este es un error bastante importante. En mi caso particular, tenía una tabla de líderes que mostraba a los usuarios con más puntos desde el comienzo de la semana. Pero los domingos, estaba vacío porque strtotime
devolvió una marca de tiempo para una fecha futura. Tenía dudas, porque simplemente no sé cómo esto podría haber pasado desapercibido, pero no pude encontrar ningún otro informe de este error.
Gracias por todo su tiempo y ayuda, amigos.
Prueba este código
// set current date
$date = date("m/d/Y");
$ts = strtotime($date); // also $ts = time();
// find the year and the current week
$year = date(''o'', $ts);
$week = date(''W'', $ts);
// print week for the current date
$i = 1; // 1 denotes the first day of week
$ts = strtotime($year.''W''.$week.$i);
echo $day = date("l", $ts); // generate the name of day
echo "<br>";
echo $day = date("Y-m-d", $ts); // generate the date
Obtendrás la fecha de la semana actual; si estás el lunes recibirás la fecha de ese lunes.
Si quieres el lunes más reciente:
function mostRecentMonday(){
if(date("w") == 1){
return strtotime("midnight today");
} else {
return strtotime("last monday");
}
}
Fácil de modificar para usar DateTime, o, incluso para especificar una fecha diferente para usar como base.
I think the only problem with your coding is TimeZone.
Solución:
Establezca su propia zona horaria. Aquí está el ejemplo de mi propia zona horaria:
Ejemplo
date_default_timezone_set(''Asia/Kolkata'');
Set the above line before calling any time function.
Que tengas un buen día.