第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何獲取兩個(gè)月/年點(diǎn)之間的每個(gè)月數(shù)和年份

如何獲取兩個(gè)月/年點(diǎn)之間的每個(gè)月數(shù)和年份

PHP
絕地?zé)o雙 2023-10-15 17:06:16
我正在創(chuàng)建一個(gè)函數(shù),您可以在其中給出起始年、月和結(jié)束年、月,并且該函數(shù)將在兩個(gè)給定點(diǎn)之間的每個(gè)月和年打印。我已經(jīng)創(chuàng)建了一個(gè)可以完美運(yùn)行的函數(shù),但我相信這不是一個(gè)好的做法,可能有更好的方法來做到這一點(diǎn)?,F(xiàn)在我正在尋求您的幫助以找到更好的方法。PS 我無法獲取完整日期作為輸入。只能獲取月份和年份。這是我的代碼 -function get_all_months($monthstart = null, $yearstart = null, $monthend = null, $yearend = null) {if (($monthstart === null) || ($yearstart === null) || ($monthend === null) || ($yearend === null)) {    $monthend = date('m');    $yearend = date('Y');    if($monthend < 6) {        $yearstart = $yearend - 1;        $monthstart = (($monthend - 5) + 12);    } else {        $yearstart = $yearend;        $monthstart = $monthend - 5;    }}$month_array = array();if ($yearstart > $yearend) {    for ($m=$monthend; $m<=12; $m++) $month_array[] = array('month' => $m, 'year' => $yearend);    for ($y=$yearend+1; $y<$yearstart; $y++) for ($m=1; $m<=12; $m++) $month_array[] = array('month' => $m, 'year' => $y);    for ($m=1; $m<=$monthstart; $m++) $month_array[] = array('month' => $m, 'year' => $yearstart);} elseif ($yearend > $yearstart) {    for ($m=$monthstart; $m<=12; $m++) $month_array[] = array('month' => $m, 'year' => $yearstart);    for ($y=$yearstart+1; $y<$yearend; $y++) for ($m=1; $m<=12; $m++) $month_array[] = array('month' => $m, 'year' => $y);    for ($m=1; $m<=$monthend; $m++) $month_array[] = array('month' => $m, 'year' => $yearend);} else {    for ($m=$monthstart; $m<=$monthend; $m++) $month_array[] = array('month' => $m, 'year' => $yearstart);}return $month_array;}編輯:根據(jù) Nigel Ren 的回答,這是我能想到的最好的方法 - function get_all_months($monthstart = null, $yearstart = null, $monthend = null, $yearend = null) {if (($monthstart === null) || ($yearstart === null) || ($monthend === null) || ($yearend === null)) {    $monthend = date('m');    $yearend = date('Y');    if($monthend < 6) {        $yearstart = $yearend - 1;        $monthstart = (($monthend - 5) + 12);    } else {        $yearstart = $yearend;        $monthstart = $monthend - 5;    }}
查看完整描述

5 回答

?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可以使用 PHP 的DateInterval類來實(shí)現(xiàn)這些目的。試試這個(gè)代碼


<?php

function getMonthsFromRange($start, $end, $format = 'M Y')

{


? ? $array = array();


? ? // Since you wanted 1 month it is Period = 1 Month

? ? $interval = new DateInterval('P1M');


? ? $realEnd = new DateTime($end);

? ? $realEnd->add($interval);


? ? $period = new DatePeriod(new DateTime($start), $interval, $realEnd);


? ? // Use loop to store date into array?

? ? foreach ($period as $date)

? ? ? ? $array[] = $date->format($format);


? ? // Return the array elements?

? ? return $array;

}


// Function call with passing the start date and end date?

$months = getMonthsFromRange('2010-10', '2011-11');


print_r($months);

它的輸出是:


Array ( [0] => Oct 2010 [1] => Nov 2010 [2] => Dec 2010 [3] => Jan 2011 [4] => Feb 2011 [5] => Mar 2011 [6] => Apr 2011 [7] => May 2011 [8] => Jun 2011 [9] => Jul 2011 [10] => Aug 2011 [11] => Sep 2011 [12] => Oct 2011 [13] => Nov 2011 )



查看完整回答
反對(duì) 回復(fù) 2023-10-15
?
胡說叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊

只需在開始日期上添加 1 個(gè)月直到結(jié)束日期即可完成...

function get_all_months($monthstart = null, $yearstart = null, $monthend = null, $yearend = null) {

? ? $output = [];

? ? $time? ?= strtotime($yearstart."-".$monthstart);

? ? $last? ?= date('m-Y', strtotime($yearend."-".$monthend));

? ? do {

? ? ? ? $month = date('m-Y', $time);

? ? ? ? $output[] =? $month;

? ? ? ? $time = strtotime('+1 month', $time);

? ? }

? ? while ($month != $last);

? ? return $output;

}

所以


print_r(get_all_months(4,2008,2,2010));

給...


Array

(

? ? [0] => 04-2008

? ? [1] => 05-2008

? ? [2] => 06-2008

? ? [3] => 07-2008

? ? [4] => 08-2008

? ? [5] => 09-2008

? ? [6] => 10-2008

? ? [7] => 11-2008

? ? [8] => 12-2008

? ? [9] => 01-2009

? ? [10] => 02-2009

? ? [11] => 03-2009

? ? [12] => 04-2009

? ? [13] => 05-2009

? ? [14] => 06-2009

? ? [15] => 07-2009

? ? [16] => 08-2009

? ? [17] => 09-2009

? ? [18] => 10-2009

? ? [19] => 11-2009

? ? [20] => 12-2009

? ? [21] => 01-2010

? ? [22] => 02-2010

)


查看完整回答
反對(duì) 回復(fù) 2023-10-15
?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊

也許你正在尋找這樣的東西:


function get_all_months($monthstart = null, $yearstart = null, $monthend = null, $yearend = null) {

    $month_array = [];

    if ($yearstart == $yearend)

        for ($m=$monthstart; $m<=$monthend; $m++) $month_array[] = array('month' => $m, 'year' => $yearstart);

    else {

        for ($m=$monthstart; $m<=12; $m++) $month_array[] = array('month' => $m, 'year' => $yearstart);

        for ($y=$yearstart+1; $y<$yearend; $y++) for ($m=1; $m<=12; $m++) $month_array[] = array('month' => $m, 'year' => $y);

        for ($m=1; $m<=$monthend; $m++) $month_array[] = array('month' => $m, 'year' => $yearend);

    }

    return $month_array;

}


查看完整回答
反對(duì) 回復(fù) 2023-10-15
?
HUWWW

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊

使用DateTime類和DateInterval,您可以創(chuàng)建指定范圍的 DateTime 對(duì)象的生成器:

<?php


function get_all_months(int $monthstart, int $yearstart, int $monthend, int $yearend) {

? ? ? ? $onemonth = new DateInterval('P1M'); // one month interval

? ? ? ? $timeperiod = new DatePeriod(

? ? ? ? ? ? ? ? DateTime::createFromFormat('Y-m', "{$yearstart}-{$monthstart}"),

? ? ? ? ? ? ? ? $onemonth,

? ? ? ? ? ? ? ? DateTime::createFromFormat('Y-m', "{$yearend}-{$monthend}")->add($onemonth)

? ? ? ? );

? ? ? ? foreach ($timeperiod as $pos) {

? ? ? ? ? ? ? ? yield clone $pos;

? ? ? ? }

}


foreach (get_all_months(12, 2009, 1, 2020) as $month) {

? ? ? ? echo "{$month->format('Y-m')}\n";

}

DateTime 應(yīng)該比普通字符串或數(shù)字?jǐn)?shù)組更靈活地使用


查看完整回答
反對(duì) 回復(fù) 2023-10-15
?
函數(shù)式編程

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊

如果我理解正確的話 - 你會(huì)得到數(shù)字形式的月份和數(shù)字形式的年份,例如 6 和 1997。如果我們假設(shè)開始年份總是小于結(jié)束年份,我建議這樣做。


function distanceBetweenDates(int $sm, int $sy, int $em, int $ey) {

    $monthsBetweenYears = ($ey - $sy + 1) * 12;

    $distanceBetweenMonths = $monthsBetweenYears - $sm - (12 - $em);

    

    $startMonth = $sm + 1;

    $startYear = $sy;

    

    while ($distanceBetweenMonths > 0) {

        if ($startMonth <= 12) {

            echo $startMonth . ' - ' . $startYear;

        } else {

            $startMonth = 1;

            $startYear++;

            echo $startMonth . ' - ' . $startYear;

        }

        echo "\n";

        $startMonth++;

        $distanceBetweenMonths--;

    }

}

您可能需要查看的唯一事情是計(jì)算中是否包含或排除給定的月份。


這里唯一缺少的是驗(yàn)證,因?yàn)槿绻诜椒▋?nèi)使用類型,則可以“跳過”某種驗(yàn)證。


查看完整回答
反對(duì) 回復(fù) 2023-10-15
  • 5 回答
  • 0 關(guān)注
  • 192 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)