23

PHP は、月の現在の日の数 (date('j')) および現在の年の数 (date('z')) を取得する方法を提供します。現在の四半期の現在の日付を取得する方法はありますか?

現在、8 月 5 日は第 3 四半期の 36 日目です。

これを計算する標準的な方法がない場合、(できれば PHP ベースの) アルゴリズムが便利な人はいますか?

4

9 に答える 9

82

どうですか:

$curMonth = date("m", time());
$curQuarter = ceil($curMonth/3);
于 2011-02-24T20:36:41.687 に答える
17

以下のメソッドでクラスを作成しました。楽しみ。

public static function getQuarterByMonth($monthNumber) {
  return floor(($monthNumber - 1) / 3) + 1;
}

public static function getQuarterDay($monthNumber, $dayNumber, $yearNumber) {
  $quarterDayNumber = 0;
  $dayCountByMonth = array();

  $startMonthNumber = ((self::getQuarterByMonth($monthNumber) - 1) * 3) + 1;

  // Calculate the number of days in each month.
  for ($i=1; $i<=12; $i++) {
    $dayCountByMonth[$i] = date("t", strtotime($yearNumber . "-" . $i . "-01"));
  }

  for ($i=$startMonthNumber; $i<=$monthNumber-1; $i++) {
    $quarterDayNumber += $dayCountByMonth[$i];
  }

  $quarterDayNumber += $dayNumber;

  return $quarterDayNumber;
}

public static function getCurrentQuarterDay() {
  return self::getQuarterDay(date('n'), date('j'), date('Y'));
}
于 2009-08-05T17:44:47.200 に答える
13
function date_quarter()
{
    return ceil(date('n', time()) / 3);
}

また

function date_quarter()
{
    $month = date('n');

    if ($month <= 3) return 1;
    if ($month <= 6) return 2;
    if ($month <= 9) return 3;

    return 4;
}
于 2012-12-15T23:07:45.640 に答える
1
<?php
function day_of_quarter($ts=null) {
    if( is_null($ts) ) $ts=time();
    $d=date('d', $ts);
    $m=date('m', $ts)-1;
    while($m%3!=0) {
        $lastmonth=mktime(0, 0, 0, $m, date("d", $ts),   date("Y",$ts));
        $d += date('t', $lastmonth);
        $m--;
    }
    return $d;
}
echo day_of_quarter(mktime(0, 0, 0, 1, 1,2009));
echo "\n";
echo day_of_quarter(time());
echo "\n";
?>
于 2009-08-05T17:56:02.870 に答える
1

暦四半期を意味すると仮定すると (会社の会計年度はその年のどの月からでも開始できるため)、date('z') を使用して年間通算日を決定し、次の単純な配列を保持できます。各四半期の開始日:

$quarterStartDays = array( 1 /* Jan 1 */, 90 /* Mar 1, non leap-year */, ... );

次に、現在の年間通算日を使用して、最初に年間通算日以下の最大の開始日を見つけてから減算します。

うるう年によって異なる数値が必要になることに注意してください。

于 2009-08-05T17:02:46.503 に答える