[php] PHP로 요일을 시작 하시겠습니까?

날짜 MM-dd-yyyy형식이 주어지면 누군가가 요일을 가져 오도록 도와 줄 수 있습니까?



답변

내가 사용하는 것은 다음과 같습니다.

$day = date('w');
$week_start = date('m-d-Y', strtotime('-'.$day.' days'));
$week_end = date('m-d-Y', strtotime('+'.(6-$day).' days'));

$ day 에는 요일을 나타내는 0에서 6까지의 숫자가 포함됩니다 (일요일 = 0, 월요일 = 1 등).
$ week_start 에는 현재주의 일요일 날짜가 mm-dd-yyyy로 포함됩니다.
$ week_end 에는 현재주의 토요일 날짜가 mm-dd-yyyy로 포함됩니다.


답변

strtotime('this week', time());

time ()을 바꿉니다. 다음 일요일 / 마지막 월요일 방법은 현재 날짜가 일요일 / 월요일이면 작동하지 않습니다.


답변

사용하기 매우 간단한 strtotime기능 :

echo date("Y-m-d", strtotime('monday this week')), "\n";

echo date("Y-m-d", strtotime('sunday this week')), "\n";

PHP 버전에 따라 약간 다릅니다 .

5.3.0-5.6.6, php7 @ 20140507-20150301, hhvm-3.3.1-3.5.1에 ​​대한 출력

2015-03-16
2015-03-22

4.3.5-5.2.17에 대한 출력

2015-03-23
2015-03-22

4.3.0-4.3.4에 대한 출력

2015-03-30
2015-03-29

Edge-Cases에서 비교

이번 주 와 같은 상대적 설명 에는 고유 한 컨텍스트가 있습니다. 다음은 이번 주 월요일과 일요일 월요일 또는 일요일 인 출력을 보여줍니다 .

$date = '2015-03-16'; // monday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))), "\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))), "\n";

$date = '2015-03-22'; // sunday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))), "\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))), "\n";

다시 말하지만 PHP 버전에 따라 약간 다릅니다 .

5.3.0-5.6.6, php7 @ 20140507-20150301, hhvm-3.3.1-3.5.1에 ​​대한 출력

2015-03-16
2015-03-22
2015-03-23
2015-03-29

4.3.5-5.0.5, 5.2.0-5.2.17에 대한 출력

2015-03-16
2015-03-22
2015-03-23
2015-03-22

5.1.0-5.1.6에 대한 출력

2015-03-23
2015-03-22
2015-03-23
2015-03-29

4.3.0-4.3.4에 대한 출력

2015-03-23
2015-03-29
2015-03-30
2015-03-29


답변

간단하게 유지 :

<?php
$dateTime = new \DateTime('2020-04-01');
$monday = clone $dateTime->modify(('Sunday' == $dateTime->format('l')) ? 'Monday last week' : 'Monday this week');
$sunday = clone $dateTime->modify('Sunday this week');
?>

출처 : PHP 매뉴얼

주의 : 일부 사용자가 언급했듯이 $ dateTime 값이 수정됩니다.


답변

$givenday = date("w", mktime(0, 0, 0, MM, dd, yyyy));

이것은 주어진 날짜 자체의 요일을 제공합니다. 여기서 0= 일요일 및 6= 토요일. 거기에서 원하는 날짜로 거꾸로 계산할 수 있습니다.


답변

이 질문에는 좋은 DateTime 답변 이 필요합니다 .

function firstDayOfWeek($date)
{
    $day = DateTime::createFromFormat('m-d-Y', $date);
    $day->setISODate((int)$day->format('o'), (int)$day->format('W'), 1);
    return $day->format('m-d-Y');
}

var_dump(firstDayOfWeek('06-13-2013'));

산출:-

string '06-10-2013' (length=10)

이것은 연도 경계와 윤년을 다룰 것입니다.


답변

편집 : 아래 링크는 명시된 PHP 버전에서 더 이상 실행되지 않습니다. strtotime의 안정성을 향상시키는 PHP 5.6에서 실행되지만 완벽하지는 않습니다! 표의 결과는 PHP 5.6의 실시간 결과입니다.

그만한 가치는 일관된 참조 프레임을 결정할 때 strtotime의 불안정한 동작에 대한 분석입니다.

http://gamereplays.org/reference/strtotime.php

기본적으로 호출 할 때 현재 어떤 요일에 있든 상관없이이 문자열 만 안정적으로 동일한 날짜를 제공합니다.

strtotime("next monday");
strtotime("this sunday");
strtotime("last sunday");