Làm thế nào để tìm ngày của một ngày trong tuần từ một ngày bằng PHP?


85

Nếu tôi có $date YYYY-mm-ddvà muốn nhận một ngày cụ thể $day(được chỉ định bằng 0 (chủ nhật) đến 6 (thứ bảy)) của tuần đó YYYY-mm-dd.

Ví dụ, nếu tôi nhận được 2012-10-11như $date5như $day, tôi muốn nhận được 2012-10-12, nếu tôi đã có 0như $day,2012-10-14

EDIT:
Hầu hết các bạn đã hiểu sai nó. Tôi có một số ngày $datevà muốn có một ngày được chỉ định trước 0-6 của cùng tuần $datelà trong.

Vì vậy, không, tôi không muốn ngày $date...


Khi nào thì tuần của bạn bắt đầu? Thứ Hai hay Chủ Nhật? Tôi biết đó là thứ hai đối với hầu hết mọi người nhưng tôi chỉ cần đảm bảo: p
keyser

3
Tôi không nghĩ những người trả lời đã hiểu đúng câu hỏi. Anh ta không muốn nhận số ngày từng ngày (sẽ là ngày ('w')), nhưng anh ta muốn chỉ định ngày VÀ số ngày và nhận ngày tương ứng từ cùng tuần với ngày được chỉ định là .. .
Vafliik

Câu trả lời:


127

Tôi nghĩ đây là những gì bạn muốn.

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

86

Bạn có thể sử dụng hàm date ():

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

hoặc là

date('l'); // dayname

Ví dụ hàm để lấy ngày thứ:

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

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

17

Thử

$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
Cách tiếp cận tốt, nhưng như bạn có thể thấy trong câu trả lời của Rezigned, bạn cũng có thể sử dụng '1 ngày', làm cho mảng $ days trở nên vô dụng.
Zulakis

1
Điều này có vẻ đúng hơn vì nó trả về ngày chính xác 2012-10-14khi bạn nhập 0, @Rezigned trả về2012-10-07
Carl

7

Nếu ngày của bạn đã là một DateTimehoặc DateTimeImmutablebạn có thể sử dụng formatphương pháp này.

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

Chuỗi định dạng giống với chuỗi được sử dụng bởi hàm ngày .


Để trả lời câu hỏi dự định:

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

5

Hướng dẫn sử dụng PHP cho biết:

w Biểu diễn số của ngày trong tuần

Do đó, bạn có thể xây dựng một ngày với mktime và sử dụng nó date("w", $yourTime);


4

Chỉ:

2012-10-11 dưới dạng $ date và 5 là $ day

<?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;

?>

Kết quả $ result = '2012-10-12' là những gì bạn muốn.


1

Tôi e rằng bạn phải làm thủ công. Lấy ngày hiện tại của ngày trong tuần, tính toán phần bù và thêm phần bù vào ngày.

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

1
Cảm ơn cách tiếp cận của bạn, nhưng không, tôi không phải làm điều đó theo cách thủ công. Hãy xem câu trả lời của Rezigned.
Zulakis

1

Tôi đã phải sử dụng một giải pháp tương tự cho tiếng Bồ Đào Nha (Brazil):

<?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()); ?>

Đơn giản, điều này sẽ thực hiện thủ thuật

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.