PHP kullanarak bir tarihten haftanın bir gününün tarihini nasıl bulabilirim?


86

Eğer bir haftanız varsa ve içinde olan haftanın $date YYYY-mm-ddbelirli bir $day(0 (pazar) ile 6 (cumartesi) arasında belirtilir) almak istiyorum YYYY-mm-dd.

Bende Örneğin, 2012-10-11olarak $dateve 5sıra $day, Almak istediğim 2012-10-12bende eğer 0olarak $day,2012-10-14

DÜZENLEME:
Çoğunuz yanlış anladınız. Bir randevum var $dateve aynı haftanın 0-6 arasında belirtilen bir günü almak istiyorum $date.

Yani hayır, gününü istemiyorum $date...


Haftan ne zaman başlıyor? Pazartesi mi, Pazar mı? Çoğu insan için Pazartesi olduğunu biliyorum ama sadece emin olmak istiyorum: p
keyser

3
Cevap verenlerin soruyu doğru anladığını sanmıyorum. Güne göre bir sayı almak istemiyor (tarih ('w') olacaktır), ancak tarihi VE gün numarasını belirtmek ve belirtilen tarihle aynı haftadan karşılık gelen tarihi almak istiyor .. .
Vafliik

Yanıtlar:


128

Sanırım istediğin bu.

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

90

Date () işlevini kullanabilirsiniz:

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

veya

date('l'); // dayname

Gün numarasını almak için örnek işlev:

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

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

17

Deneyin

$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
İyi bir yaklaşım, ancak Rezigned'in cevabında da görebileceğiniz gibi, '1 gün'ü de kullanabilir ve $ days dizisini işe yaramaz hale getirebilirsiniz.
Zulakis

1
Bu daha doğru görünüyor çünkü 2012-10-14girdiğiniz zaman doğru tarihi 0döndürüyor, @Rezigned döner2012-10-07
Carl

7

Tarihiniz zaten bir ise DateTimeveya yöntemi DateTimeImmutablekullanabilirsiniz format.

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

Biçim dizesi, tarih işlevi tarafından kullanılan dizeyle aynıdır .


Amaçlanan soruyu cevaplamak için:

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

5

PHP Kılavuzu şunu söyledi:

w Haftanın gününün sayısal gösterimi

Bu nedenle mktime ile bir tarih oluşturabilir ve içinde kullanabilirsiniz date("w", $yourTime);


4

Sadece:

$ Tarih olarak 2012-10-11 ve $ gün olarak 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;

?>

$ Sonuç = '2012-10-12' istediğiniz şeydir.


1

Korkarım bunu elle yapmanız gerekiyor. Tarihin haftanın geçerli gününü alın, farkı hesaplayın ve farkı tarihe ekleyin.

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

1
Yaklaşımınız için teşekkürler, ama hayır, bunu elle yapmak zorunda değilim. Rezigned'in cevabına bir göz atın.
Zulakis

1

Portekizce (Brezilya) için benzer bir çözüm kullanmak zorunda kaldım:

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

Basit, bu hile yapmalı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.