2011-04-19 12 views
5

estoy haciendo algunas estadísticas, quiero seleccionar el tiempo desde (la semana pasada solamente) y esta semana.la semana pasada, esta semana (php)

para esta semana su fácil:

$start = strtotime('this week'); 
$finish = time(); 

de la semana pasada

$start = strtotime('last week'); 
$finish = ?????? 
+3

¿Se da cuenta de que 'strtotime ('esta semana') 'devuelve el mismo valor que' time() '? –

Respuesta

11

Esto?

$start = strtotime('2 weeks ago'); 
$finish = strtotime('last week'); 

Editar: cambio de crédito al comentario de @Dominic Barnes.

+0

estúpido: ¿también es posible usar -1 semana para la semana pasada? – TDSii

+0

@TDSii: ¿lo has probado? – Jonah

+1

NOTA: esta pregunta y respuesta no coinciden. Si la pregunta es sobre la semana, entonces el comienzo de la semana es el lunes y el final es el domingo. Según en qué región vivas, por supuesto. Sin embargo, strtotime ('1 semana atrás') funcionará en realidad en 7 días. ¡Allí para esta respuesta es una pregunta, cómo llegar hace 7 días, no para el programa de estadísticas, que se supone que muestra las estadísticas de la semana pasada! Código de depuración: 'echo date (" dmY ", strtotime (" 1 week ago ", strtotime ('yesterday')))' –

2

es eso lo que quieres?

$start = strtotime('last week'); 
$finish = strtotime('this week'); 

Dominic también señala que time() === strtotime('this week') (CodePad).

-1

Si está buscando "Última Semana" en lugar de los últimos 7 días

$start = strtotime('Last Week'); // Will give you last Monday 
$finish = strtotime('Last Sunday'); // Will give you last Sunday 
+0

Comprende el problema, pero su solución cubre menos de 24 h, y no una semana o 7 días . Entonces es: $ start = 'Sunday'; to $ finish = 'Lunes'; Y no se invierten son: 24.08.2015 - 23.08.2015 por ejemplo. –

5

Si la pregunta es para el script PHP estadística. Entonces todas las respuestas y básicamente la pregunta es incorrecta.

  • Última semana en estadísticas = Uno antes actualmente en ejecución la semana del domingo al lunes
  • Esta semana en estadísticas = semana Actualmente en ejecución del domingo al lunes

(o de lunes a domingo, según el calendario al que esté acostumbrado, pero en PHP, que es una semana)

Esto significa que no es a partir de hoy, menos 7 días. Eso no es último o esta semana. Entonces la respuesta seleccionada actualmente es correcta y cuenta 7 días atrás. De acuerdo, es domingo, en el momento de las pruebas, por lo que se muestra correcto. Sin embargo, mediante la edición de la fecha de hoy, se puede ver el problema:

// Selected answer: 
$start = strtotime('2 weeks ago'); 
$finish = strtotime('last week'); 

// But if today isn't Sunday, you can see the code is wrong: 
echo date("d.m.Y", strtotime("1 week ago", strtotime('yesterday'))); 
// Output: 15.08.2015 00:00:00 - 17.08.2015 00:00:00 

Hay que establecer el inicio de la semana y el fin de la semana. strtotime() puede admitir más cosas, por lo que es muy probable que pueda hacer que esta respuesta sea mejor y más clara. Sin embargo se obtiene el código de trabajo y un buen ejemplo de la lógica de ...

Mi solución propuesta:

$today = strtotime('today 00:00:00'); 

$this_week_start = strtotime('-1 week monday 00:00:00'); 
$this_week_end = strtotime('sunday 23:59:59'); 

$last_week_start = strtotime('-2 week monday 00:00:00'); 
$last_week_end = strtotime('-1 week sunday 23:59:59'); 

echo date('d.m.Y H:i:s', $today) . ' - Today for example purposes<br />'; 
echo date('d.m.Y H:i:s', $this_week_start) . ' - ' . date('d.m.Y H:i:s', $this_week_end) . ' - Currently running week period<br />'; 
echo date('d.m.Y H:i:s', $last_week_start) . ' - ' . date('d.m.Y H:i:s', $last_week_end) . ' - Last week period<br />'; 

Sobre produce en la actualidad:

30.08.2015 00:00 : 00 - Hoy, por ejemplo, propósitos
24.08.2015 00:00:00 - 30.08.2015 23:59:59 - Período de la semana en curso
17.08.2015 00:00:00 - 23.08.2015 23:59:59 - Período de la semana pasada

Porque para las estadísticas, tiene que ser preciso y si el final sería 00:00:00, entonces esa fecha no se contará. Y si la fecha fuera ser un día más tarde a las 00:00:00, entonces la fecha no es correcta. Allí, esta solución es la forma correcta de hacerlo, con fines estadísticos al menos.

+0

Ahora es lunes, ahora está tomando el comienzo de la semana actual hasta el lunes de la semana pasada. – digout

1

Si la búsqueda de la última semana con fines estadísticos, a partir del lunes, terminando el domingo:

$last_week_start = strtotime("monday last week"); 
$last_week_end = strtotime("monday this week - 1 second"); 

"esta semana" es importante, de lo contrario, si esta semana Lunes ya está en el pasado (por ejemplo, si es martes ya), le dará el lunes de la próxima semana.

En cuanto a los meses/años, he utilizado el enfoque mktime clase:

el mes pasado

$last_month_start = mktime(0, 0, 0, date('m')-1, 01); 
$last_month_end = mktime(23, 59, 59, date('m'), 0); 

año pasado

$last_year_start = mktime(0, 0, 0, 1, 1, date('Y')-1); 
$last_year_end = mktime(23, 59, 59, 1, 0, date('Y')); 
Cuestiones relacionadas