date_modify를 DateTime 객체로 사용하여 PHP에서 현재 달의 첫날


157

이번 주 월요일에 다음을 얻을 수 있습니다.

$monday = date_create()->modify('this Monday');

나는 이번 달 1 일과 같은 편을 원합니다. 어떻게하면 되나요?


어, 난 곤경에 처해있다. John Conde는 내가 대답 한 질문에 대답했지만, 5.2에서 작동해야한다고 언급하는 것을 잊었다. 실제로 Mr-sk의 대답을 사용할 것이다.
pihentagy

답변:


260

PHP 5.3이 작동해야합니다 ( "첫날"은 PHP 5.3에 도입되었습니다). 그렇지 않으면 위의 예가 유일한 방법입니다.

<?php
    // First day of this month
    $d = new DateTime('first day of this month');
    echo $d->format('jS, F Y');

    // First day of a specific month
    $d = new DateTime('2010-01-19');
    $d->modify('first day of this month');
    echo $d->format('jS, F Y');

    // alternatively...
    echo date_create('2010-01-19')
      ->modify('first day of this month')
      ->format('jS, F Y');

PHP 5.4 이상에서는 다음과 같이 할 수 있습니다 :

<?php
    // First day of this month
    echo (new DateTime('first day of this month'))->format('jS, F Y');

    echo (new DateTime('2010-01-19'))
      ->modify('first day of this month')
      ->format('jS, F Y');

간결한 방법을 선호하고 이미 연도 및 월을 숫자 값으로 사용하는 경우 date()다음을 사용할 수 있습니다 .

<?php
    echo date('Y-m-01'); // first day of this month
    echo date("$year-$month-01"); // first day of a month chosen by you

9
현재 달의->modify() 첫날 만 원한다면 통과 할 필요가 없습니다 . 다음 과 같이 DateTime 생성자에 직접 전달할 수 있습니다 . 그냥 ...'first day of this month'$date = new DateTime('first day of this month')
Dzhuneyt

334

여기 내가 사용하는 것이 있습니다.

매월 첫째 날 :

date('Y-m-01');

매월 마지막 날 :

date('Y-m-t');

10
날짜를 문자열로 표시하는 것만으로도이를 해결하는 가장 간단하고 읽기 쉬운 방법은 IMO입니다.
Markus Amalthea Magnuson

5
그 달의 마지막 날은를 사용하여 잡을 수 있습니다 date('Y-m-t');.
Mark Tomlin

7
참고로 날짜의 't'( 'Ym-t')는 항상 해당 월의 일 수를 나타냅니다. 이번 달의 마지막 날을 얻는 훌륭하고 간단한 방법입니다.
파스칼 클라인

1
이것을 사용하여 요일을 얻으려고 date('w', '2015-05-01');하면 실제 하루 대신 전날로 끝납니다. (이것은 올바른 5 대신 4를 줄 것입니다).
PBwebD

5
이것은 단순히 훌륭합니다. 나는 다음을 수행함으로써 달의 시간에 대한 최소 및 최대 경계를 제공하기 위해 조금 확장했습니다. $monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
H2ONOCK

32

이것은 당신이 필요로하는 모든 것입니다 :

$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());

$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());

$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());

echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';

echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';

echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';

4
이것은 깔끔한 솔루션이지만 strtotime('first day of this month', time())첫날을 반환하며 시간은 현재와 동일합니다. 0:00시 첫날이 아닌 첫날이자 현재입니다. 이 문제를 해결합니다 strtotime('first day of this month 00:00:00', time()).
Kalle H. Väravas

22

현재이 솔루션을 사용하고 있습니다 :

$firstDay = new \DateTime('first day of this month');
$lastDay = new \DateTime('last day of this month');

내가 온 유일한 문제는 이상한 시간이 설정되고 있다는 것입니다. 검색 인터페이스에 올바른 범위가 필요했고 결과는 다음과 같습니다.

$firstDay = new \DateTime('first day of this month 00:00:00');
$lastDay = new \DateTime('first day of next month 00:00:00');

이것은 시원하지만 실제 달 첫날에 문제가 있습니다. 오늘이 9 월 1 일 오전 11 시라면 나는 8 월 1 일을 얻을 것이다! 실제로 오늘 "1 일"인지 확인하고 "지금"을 사용해야합니다. 이상한 (Php 7.3.9)
Jacob Christensen

@JacobChristensen은 (는) 아직 경험이 없습니다. 어떻게 고쳤어?
Nikola Petkanski

사실, PHP 솔기는 이것에 대해 매우 시원하지 않을 것입니다. $ n = new \ DateTime ( '첫날'(new \ DateTime ())-> format ( 'F')); "1 월 첫째 날". 월요일이되는 주에도
Jacob Christensen


6

PHP 5.2에서는 다음을 사용할 수 있습니다.

<? $d = date_create();
print date_create($d->format('Y-m-1'))->format('Y-m-d') ?>

4

미운, (위의 메소드 호출을 사용하지 않음)이지만 작동합니다.

echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));   

같은 시나리오에서 달의 마지막 날을 어떻게 계산하겠습니까?
LoneWOLFs

@LoneWOLF last day of {$month} {$year}또는 last day of this month둘 다 작동합니다. 그러나 $ month는 "Decemember"로 생각되는 "January"와 같은 달의 이름을 포함하는 문자열이어야합니다. 또는 간단하게 사용할 수 있습니다 date('Y-m-t');.
Mark Tomlin

3

다음과 같이 할 수 있습니다.

$firstday = date_create()->modify('first day January 2010');

3

나는 이것을 매일 cron 작업과 함께 사용하여 주어진 달의 첫날에 내 계열사에게 이메일을 보내야하는지 확인합니다. 다른 답변보다 몇 줄 더 있지만 바위처럼 단단합니다.

//is this the first day of the month?
$date = date('Y-m-d');
$pieces = explode("-", $date);
$day = $pieces[2];

//if it's not the first day then stop
if($day != "01") {

     echo "error - it's not the first of the month today";
     exit;

}

2

날짜 방법을 사용하면 결과를 얻을 수 있어야합니다. 즉; 날짜 ( 'N / D / l', mktime (0, 0, 0, 월, 일, 년));

예를 들어

echo date('N', mktime(0, 0, 0, 7, 1, 2017));   // will return 6
echo date('D', mktime(0, 0, 0, 7, 1, 2017));   // will return Sat
echo date('l', mktime(0, 0, 0, 7, 1, 2017));   // will return Saturday

0

그 특별한 PHP 표현은 정신적으로 first day of ...훌륭하지만 내 머리에서 나갔다.

그래서 나는 모든 IDE에 의해 자동 완성되는 몇 가지 기본 날짜 시간 추상화와 톤의 특정 구현을 구축하기로 결정했습니다. 요점은 어떤 종류의 것들을 찾는 것입니다. 마찬가지로, today, now, the first day of a previous month,가 목록에 한 것들의 등 모든 이다 날짜 시간은. 따라서이라는 인터페이스 또는 추상 클래스 ISO8601DateTime와이를 구현하는 특정 날짜 시간이 있습니다.

특정 경우의 코드는 다음과 같습니다.

(new TheFirstDayOfThisMonth(new Now()))->value();

이 방법에 대한 자세한 내용은 이 항목을 참조하십시오 .

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