Простой способ получить номер дня текущего квартала?

Мы используем утилиту BOMStripperInputStream.java , чтобы удалить спецификацию с нашего ввода, если она есть.

20
задан Chad Johnson 5 August 2009 в 16:51
поделиться

3 ответа

Я написал класс с помощью следующих методов. Наслаждайтесь.

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'));
}
15
ответ дан 29 November 2019 в 06:09
поделиться

Предполагая, что вы имеете в виду календарный квартал (поскольку финансовый год компании может начинаться в любом месяце года), вы можете полагаться на дату ('z '), чтобы определить день года, а затем сохранить простой массив дней, с которых начинается каждый квартал:

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

Затем, используя текущий день года, вы можете сначала найти самый большой начальный день, который меньше или равняется дню года, затем вычтите.

1
ответ дан 29 November 2019 в 06:09
поделиться
<?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";
?>
1
ответ дан 29 November 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: