PHPを使用して日付から曜日を見つける方法は?


86

を持っていて、その週の$date YYYY-mm-dd特定の$day(0(日曜日)から6(土曜日)で指定)を取得したい場合YYYY-mm-dd

たとえば、私が2012-10-11as$date5as$dayを取得2012-10-12した場合、私は取得0したい、asを取得した場合$day2012-10-14

編集:
あなたのほとんどはそれを誤解しました。日付$dateを取得しましたが、同じ週の0〜6で指定された日を取得したいと思います$date

だから、いや、私はその日を望んでいません$date...


あなたの週はいつ始まりますか?月曜日または日曜日?ほとんどの人にとって月曜日であることは知っていますが、確認しているのは:p
keyer 2012年

3
答えた人は質問を正しく理解していないと思います。彼は日付ごとの番号(date( 'w'))を取得したくありませんが、日付と日番号を指定し、指定した日付と同じ週から対応する日付を受け取りたいと考えています。 。
Vafliik

回答:


128

これがあなたの望むものだと思います。

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

90

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配列を役に立たなくすることもできます。
ズラキス2012年

1
2012-10-14入力すると正しい日付が返されるため、これはより正確に見えます0。@ Rezignedは戻ります2012-10-07
Carl

7

日付がすでにであるDateTime場合、またはDateTimeImmutableメソッドを使用できますformat

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

フォーマット文字列は、date関数で使用されるものと同じです。


意図した質問に答えるには:

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

5

PHPマニュアルによると:

w曜日の数値表現

したがって、mktimeを使用して日付を作成し、その中で使用することができます date("w", $yourTime);


4

ただ:

2012-10-11を$ dateとして、5を$ 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;

?>

$ 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の答えを見てください。
ズラキス2012年

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

簡単です、これでうまくいくはずです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.