PHP를 사용하여 날짜에서 요일을 찾는 방법은 무엇입니까?


85

내가 가지고 있고 $date YYYY-mm-dd그주의 특정 $day(0 (일요일)에서 6 (토요일)으로 지정) 을 얻고 싶다면 YYYY-mm-dd.

내가 가진 예를 들어, 2012-10-11같은 $date5같이 $day, 내가 싶어 2012-10-12내가 가진 한 경우 0$day,2012-10-14

편집 :
대부분은 그것을 오해했습니다. 나는 어떤 날짜를 얻었고 $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. @Rezigned가 반환합니다2012-10-07
Carl

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

다만:

$ date로 2012-10-11, $ day로 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()); ?>

간단합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.