php 获取日期的月份,php – 获取2个日期之间的所有月份

我创建了一个函数,它返回一个包含每个月的数组,从提供的碳日期开始到当前日期结束.

虽然该功能正在做它应该做的事情,但它看起来很可怕.很明显,我的编程技巧还不是他们应该做的.当然必须有更好的方法来实现我想要的.

我的代码看起来像这样:

class DateUtilities {

protected $months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];

public function getMonthListFromDate(Carbon $date)

{

$monthArray = array();

$today = Carbon::today();

$currentYear = $today->copy()->format('Y');

$currentMonth = strtolower($today->copy()->format('F'));

$startYear = $date->copy()->format('Y');

$startMonth = strtolower($date->copy()->format('F'));

for($i = $startYear; $i <= $currentYear; $i ++) {

foreach($this->months as $monthIndex => $month) {

if (($monthIndex >= array_search($startMonth, $this->months) && $i == $startYear) ||

($monthIndex <= array_search($currentMonth, $this->months) && $i == $currentYear) ||

($i != $startYear && $i != $currentYear)) {

$formattedMonthIndex = ($monthIndex + 1);

if($formattedMonthIndex < 10) {

$monthArray['0' . $formattedMonthIndex . '-' . $i] = $month . ' ' . $i;

} else {

$monthArray[$formattedMonthIndex . '-' . $i] = $month . ' ' . $i;

}

}

}

}

return $monthArray;

}

}

结果是:

array:25 [▼

"03-2013" => "march 2013"

"04-2013" => "april 2013"

"05-2013" => "may 2013"

"06-2013" => "june 2013"

"07-2013" => "july 2013"

"08-2013" => "august 2013"

"09-2013" => "september 2013"

"10-2013" => "october 2013"

"11-2013" => "november 2013"

"12-2013" => "december 2013"

"01-2014" => "january 2014"

"02-2014" => "february 2014"

"03-2014" => "march 2014"

"04-2014" => "april 2014"

"05-2014" => "may 2014"

"06-2014" => "june 2014"

"07-2014" => "july 2014"

"08-2014" => "august 2014"

"09-2014" => "september 2014"

"10-2014" => "october 2014"

"11-2014" => "november 2014"

"12-2014" => "december 2014"

"01-2015" => "january 2015"

"02-2015" => "february 2015"

"03-2015" => "march 2015"

]

任何人都可以帮我改进这段代码吗?

编辑:

在我提出以下最佳技巧之后:

class DateUtilities {

public function getMonthListFromDate(Carbon $start)

{

$start = $start->startOfMonth();

$end = Carbon::today()->startOfMonth();

do

{

$months[$start->format('m-Y')] = $start->format('F Y');

} while ($start->addMonth() <= $end);

return $months;

}

}

谢谢你的帮助!

解决方法:

使用DateTime可以轻松实现.

>为每个开始和结束日期创建一个日期时间对象

>设置1个月的间隔

>以1个月的间隔获取开始日期和结束日期之间的一组日期

示例:

public function getMonthListFromDate(Carbon $date)

{

$start = new DateTime(); // Today date

$end = new DateTime($date->toDateTimeString()); // Create a datetime object from your Carbon object

$interval = DateInterval::createFromDateString('1 month'); // 1 month interval

$period = new DatePeriod($start, $interval, $end); // Get a set of date beetween the 2 period

$months = array();

foreach ($period as $dt) {

$months[] = $dt->format("F Y");

}

return $months;

}

标签:php,php-carbon

来源: https://codeday.me/bug/20190725/1528421.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值