Як знайти дату дня тижня з дати за допомогою PHP?


85

Якщо у мене є $date YYYY-mm-ddі я хочу отримати конкретну $day(вказану від 0 (неділя) до 6 (субота)) тижня, що YYYY-mm-ddє.

Наприклад, якщо я отримав 2012-10-11як $dateі 5як $day, я хочу отримати 2012-10-12, якщо я отримав 0як $day,2012-10-14

EDIT:
Більшість з вас неправильно зрозуміли це. Я отримав якусь дату, $dateі хочу отримати день, вказаний 0-6 того ж тижня $date.

Так що ні, я не хочу дня $date...


Коли починається ваш тиждень? Понеділок чи неділя? Я знаю, що для більшості людей понеділок, але я просто переконуюсь: p
keyser

3
Не думаю, що люди, які відповіли, зрозуміли питання належним чином. Він не хоче отримувати число дня за датою (яка буде датою ('w')), але він хоче вказати дату І номер дня і отримати відповідну дату з того самого тижня, що і вказана дата. .
Vafliik

Відповіді:


127

Я думаю, це те, що ти хочеш.

$dayofweek = date('w', strtotime($date));
$result    = date('Y-m-d', strtotime(($day - $dayofweek).' day', strtotime($date)));

86

Ви можете використовувати функцію date ():

date('w'); // day of week

або

date('l'); // dayname

Приклад функції для отримання номера дня:

function getWeekday($date) {
    return date('w', strtotime($date));
}

echo getWeekday('2012-10-11'); // returns 4

17

Спробуйте

$date = '2012-10-11';
$day  = 1;
$days = array('Sunday', 'Monday', 'Tuesday', 'Wednesday','Thursday','Friday', 'Saturday');
echo date('Y-m-d', strtotime($days[$day], strtotime($date)));

2
Хороший підхід, але, як ви можете бачити у відповіді Rezigned, ви також можете використовувати "1 день", роблячи масив $ days марним.
Zulakis,

1
Це здається більш правильним, оскільки повертає правильну дату, 2012-10-14коли ви вводите 0, повертається @Rezigned2012-10-07
Карл

7

Якщо ваша дата вже є DateTimeабо DateTimeImmutableви можете скористатися formatметодом.

$day_of_week = intval($date_time->format('w'));

Рядок формату ідентичний такому, який використовується функцією дати .


Щоб відповісти на заплановане питання:

$date_time->modify($target_day_of_week - $day_of_week . ' days');

5

Посібник PHP сказав:

w Числове представлення дня тижня

Тому ви можете побудувати дату за допомогою mktime і використовувати в ній date("w", $yourTime);


4

Просто:

2012-10-11 як $ дата і 5 як $ день

<?php
$day=5;
$w      = date("w", strtotime("2011-01-11")) + 1; // you must add 1 to for Sunday

echo $w;

$sunday = date("Y-m-d", strtotime("2011-01-11")-strtotime("+$w day"));

$result = date("Y-m-d", strtotime($sunday)+strtotime("+$day day"));

echo $result;

?>

$ Result = '2012-10-12' - це те, що ви хочете.


1

Боюсь, вам доведеться робити це вручну. Отримайте поточний день тижня дати, обчисліть зсув і додайте зсув до дати.

$current = date("w", $date)
$offset = $day - $current
$new_date = new DateTime($date)
    ->add(
        new DateInterval($offset."D")
    )->format('Y-m-d')

1
Дякую за ваш підхід, але ні, мені не потрібно робити це вручну. Погляньте на відповідь Rezigned.
Zulakis,

1

Мені довелося застосувати подібне рішення для португальської (Бразилія):

<?php
$scheduled_day = '2018-07-28';
$days = ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'];
$day = date('w',strtotime($scheduled_day));
$scheduled_day = date('d-m-Y', strtotime($scheduled_day))." ($days[$day])";
// provides 28-07-2018 (Sáb)

1
<?php echo date("H:i", time()); ?>
<?php echo $days[date("l", time())] . date(", d.m.Y", time()); ?>

Просто, це повинно зробити трюк

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.