2016-08-09 3 views
1

PHP의 strtotime()은 현재 연도를 기본값으로 사용합니다. 미래 날짜 만 얻는 방법?PHP strtotime()의 미래 날짜 만

echo date('l d. M Y', strtotime('first sunday of april')); // Sunday 03. Apr 2016 

나는 4 월 다음 첫 번째 일요일을 얻을 관리 할 수 ​​없습니다. 날짜는 과거가 아니어야하며 항상 상대적인 것이어야합니다 (2017 또는 2018 하드 코드되지 않음).

echo date('l d. M Y', strtotime('first sunday of next april')); // fails 

echo date('l d. M Y', strtotime('first sunday of april next year')); // wrong from January until that Sunday in April 

은 내가 여러 단계에서 할 또는 현재 시간 이전 인 경우 첫 번째 일요일 후/확인하고 끝에 '내년'을 삽입하는 함수를 만들 수 있습니다 생각합니다.

그러나이 한 strtotime()

+1

strtotime는 때때로 마술처럼 보일 수 있지만 인공 지능이 아니고 전능도가 아니다 ent. 만약 당신이 먹는 것을 분석 할 수 없다면, 때때로 코에 의해 그것을 이끌어 내고 선택적인 두번째 인자 인 base timestamp를 제공해야합니다. "jan 1 2017"을 기본 시간으로 제공하십시오. –

+0

좋은 지적이지만, "내년"또는 "내년"이라는 키워드를 제외 할 수 없기 때문에 제 상황에서는 잘 작동하지 않습니다. 어쨌든, 당신 말이 맞아 ... PHP 사람들이 더 많은 pixie 먼지를 추가 할 수있는 여지가있다. :-) – suntrop

답변

3

내가이 특히 우아한 같아요 간단한 솔루션이지만, 작동, 나는 당신이 찾고 있던 무슨 희망 궁금 해서요?

echo date('l d. M Y', strtotime('first sunday of april', strtotime('first day of next year'))); 

그러나 이것은

Tuesday 01. Aug 2017 
Sunday 02. Apr 2017 

년이 변경된 날짜의 에코, 당신이 할 필요가 없을 것입니다 제공하는 더 나은, 유지 보수, 읽을 수있는 솔루션

$d = new DateTime(); 
$d->modify('first day of next year'); 
echo $d->format('l d. M Y') . PHP_EOL; 
$d->modify('first sunday of april'); 
echo $d->format('l d. M Y') . PHP_EOL; 

것 같아 거기에 그 해가 바뀌 었음을 증명하기 위해 거기에

+0

@Mitkosoft 때문에 Cudos는 기본적으로 내 수정 사항을 DateTime 클래스에 적용 했으므로 그의 답변에서 제안했지만 어려운 것을 제거했다. 코딩 된 연도. 이것이 당신에게 mitko를 불쾌하게하지 않기를 바랄 바란다 – RiggsFolly

+0

고마워요! 나는 같이 갈거야 ... (날짜 ('m') <7)? strtotime ('올해의 6 월 첫째 일요일 - 1 일 오전 10시') : strtotime ('내년 6 월 첫째 일요일 - 1 일 오전 10시') ... 아주 정확하지는 않지만, 암호 – suntrop