카본으로 전월의 첫날과 마지막 날을 얻는 방법 - 라라벨
Carbon Library를 사용하는 지난달의 첫째 날과 마지막 날이 필요합니다. 제가 시도한 것은 다음과 같습니다.
$firstDayofPreviousMonth = Carbon::now()->startOfMonth()->subMonth()->toDateString();
$lastDayofPreviousMonth = Carbon::now()->endOfMonth()->subMonth()->toDateString();
내가 얻는 결과는$firstDayofPreviousMonth = '2016-04-01'
(현재 달이 5일(5월)) 및 다음 기간 동안$lastDayofPreviousMonth = '2016-05-01'
.
에 대한 정확한 결과를 얻고 있습니다.$firstDayofPreviousMonth
하지만 그것은 나에게 30일 전의 결과를 주고 있고, 나에게 잘못된 결과를 주고 있습니다.$lastDayofPreviousMonth
.
이것 좀 도와주실 분 있나요?
사용해 보십시오.
$start = new Carbon('first day of last month');
$end = new Carbon('last day of last month');
이것만 드셔보세요.
$firstDayofPreviousMonth = Carbon::now()->startOfMonth()->subMonth()->toDateString();
$lastDayofPreviousMonth = Carbon::now()->subMonth()->endOfMonth()->toDateString();
업데이트된 코드, 더 정확한 코드
$firstDayofPreviousMonth = Carbon::now()->startOfMonth()->subMonthsNoOverflow()->toDateString();
$lastDayofPreviousMonth = Carbon::now()->subMonthsNoOverflow()->endOfMonth()->toDateString();
@켄파이 감사합니다.
이것으로...00:00에 시작하는 날짜와 23:59에 끝나는 날짜
$start = new Carbon('first day of last month');
$start->startOfMonth();
$end = new Carbon('last day of last month');
$end->endOfMonth();
왜 잘못된 결과를 얻었는지에 대한 질문에 구체적으로 답하기$lastDayofPreviousMonth
.
다음 예제에서 이 문을 분석해 보겠습니다.
Carbon::now()->endOfMonth()->subMonth()->toDateString();
// Carbon::now() > 2016-05-05
// ->endOfMonth() > 2016-05-31
// ->subMonth() > 2016-04-31 // Simply takes 1 away from 5.
이것은 우리에게 유효하지 않은 날짜를 남깁니다. 4월 31일은 없습니다.추가 날짜는 마지막 유효 날짜(2016-04-30 + 1)에 추가되어 날짜가 5월(2016-05-01)로 롤됩니다.
앞에서 언급한 것처럼 이러한 일이 발생하지 않도록 하려면 항상 다른 작업을 수행하기 전에 날짜를 월 1일로 재설정합니다(매달 1일이 있는 경우).
$lastDayofPreviousMonth = Carbon::now()->startofMonth()->subMonth()->endOfMonth()->toDateString();
// Carbon::now() > 2016-05-05
// ->startofMonth() > 2016-05-01 00:00:00
// ->subMonth() > 2016-04-01 00:00:00
// ->endOfMonth() > 2016-04-30 23:59:59
현재 카본에서 메소드 사용 시 버그가 발생하였습니다.
Carbon::now()->startOfMonth()->subMonth()->endOfMonth()->toDateTimeString();
이 버그는 31일이 있는 달의 경우 마지막 날을 30으로 반환합니다.
IE - 3월에 위의 통화를 실행하면 예상대로 2017-03-31이 아닌 2017-03-30이 반환됩니다.
날짜 간 작업을 하다가 결국 사용하게 되었습니다.
Carbon::now()->startOfMonth()->subSeconds(1)->toDateTimeString();
이것은 31일에 끝나는 해당 날짜에 대한 정확한 dateTimeString으로 끝났습니다.
또 다른 해결책은 탄소 방법을 사용하는 것입니다.subMonthNoOverflow()
:
$lastDayofPreviousMonth = Carbon::now()->subMonthNoOverflow()->endOfMonth()->toDateString();
31일 월호로 넘어가면 여기서 찾을 수 있습니다. https://github.com/briannesbitt/Carbon/issues/627
이것은 나에게 효과가 있습니다.
$firstDayofPreviousMonth = Carbon::now()->startOfMonth()->subMonth()->toDateTimeString(); // 2021-08-01 00:00:00
$lastDayofPreviousMonth = Carbon::now()->endOfMonth()->subMonth()->toDateTimeString(); // 2021-08-31 23:59:59
단일 $date 변수 사용
$date = Carbon::now();
$firstDayofPreviousMonth = $date->startOfMonth()->subMonth()->toDateTimeString(); // 2021-08-01 00:00:00
$lastDayofPreviousMonth = $date->endOfMonth()->toDateTimeString(); // 2021-08-31 23:59:59
언급URL : https://stackoverflow.com/questions/37153903/how-to-get-first-and-last-day-of-previous-month-with-carbon-laravel
'UFO ET IT' 카테고리의 다른 글
@Qualifier와 @Resource의 차이 (0) | 2023.08.21 |
---|---|
CSS 글꼴 속기에서 슬래시는 무엇을 의미합니까? (0) | 2023.08.21 |
확인란 값은 항상 'on'입니다. (0) | 2023.08.21 |
CSS 그리드 레이아웃의 동일한 높이 행 (0) | 2023.08.21 |
웹 애플리케이션 개발에서 AJAX를 사용하지 않을 때는 언제입니까? (0) | 2023.08.21 |