2016-11-29 5 views
2

Мне нужно получить первый день недели (понедельник), 8 недель назад с сегодняшнего дня, где 8 - переменная.Получить первый день текущей недели - x

Каков наилучший способ сделать это в PHP?

+0

так что вы хотите сказать, вас нужно ехать 8 недель назад и получить дату понедельника с этой недели? –

+0

Да, именно то, что я имел в виду. –

+1

Лучший способ - использовать функции [datetime] (http://php.net/manual/en/ref.datetime.php) или [DateTime class] (http://php.net/manual/en/class. datetime.php) –

ответ

0
$weeks = 8; 

// Timestamp for $weeks weeks ago 
$time = strtotime("$weeks weeks ago"); 

// Day of the week for $time (1 - Mon, ...) 
$week_day = date('N', $time); 

// Number of days from Monday 
$diff = $week_day - 1; 

// The date of the Monday $weeks weeks ago 
echo date('j', $time - ($diff * 24 * 3600)); 
+0

Для моего случая этот ответ самый лучший. Я заменил формат выходной даты на «d/m/Y». Спасибо всем за очень быстрые ответы! –

0

Вы можете сделать некоторую математику с датами в PHP, как:

$now = date('F d, Y H:i'); 
$newdate = date('F d, Y H:i', strtotime($now.' - 8 weeks')); 
echo $newdate; 

В этом случае он будет выводить текущую дату минус 8 недель.

Также сосчитать, какой день сегодня вы можете использовать:

$dw = date("w", strtotime($newdate)); 

Где $dw будет 0 (воскресенье) до 6 (в субботу) подробную информацию можно найти: PHP: date

Решение

В вашем случае это будет выглядеть следующим образом:

<?php 
$weeks = 8; 

$now = date('F d, Y H:i:s'); 
$newdate = date('F d, Y H:i:s', strtotime($now.' - '.$weeks.' weeks')); 
$new_date_day = date("w", strtotime($newdate)); 
$minus = $new_date_day - 1; 

if ($minus < 0) { //check if sunday 
    $plus = $minus * -1; 
    $newdate = date('F d, Y H:i:s', strtotime($newdate.' + '.$plus.' days')); 
} else {  
    $newdate = date('F d, Y H:i:s', strtotime($newdate.' - '.$minus.' days')); 
} 

echo $newdate; 
?> 

Конечно, вы можете echo какой бы стиль вы ни выбрали. F.ex. F d, Y H:i:s выведет November 28, 2016 06:18:03.

0

На самом деле это не очень сложно, все, что вам нужно сделать, это немного поиграть с датами;

<?php 
$dt = new Datetime(sprintf('%d weeks ago', 8)); // replace 8 with variable, your value, whatever 
$day = $dt->format('w'); 
$dt->modify(sprintf('%d days go', ($day - 1) % 7)); 

ваш $dt должен тогда иметь значение, которую вы ищете

0

Вы можете сделать это путь

echo date("l M-d-Y", strtotime('monday this week')); 
echo date("l M-d-Y", strtotime('sunday this week')); 
echo date("l M-d-Y", strtotime('monday last week')); 
echo date("l M-d-Y", strtotime('sunday last week')); 
echo date("l M-d-Y", strtotime('monday next week')); 
echo date("l M-d-Y", strtotime('sunday next week')); 

Вы можете также поиск monthwise

echo date("l M-d-Y", strtotime('first day of this month')); 
echo date("l M-d-Y", strtotime('last day of this month')); 
echo date("l M-d-Y", strtotime('first day of last month')); 
echo date("l M-d-Y", strtotime('last day of last month')); 
echo date("l M-d-Y", strtotime('first day of next month')); 
echo date("l M-d-Y", strtotime('last day of next month')); 
Смежные вопросы