Geçerli çeyrek günlük sayısını almak için kolay yolu?

4 Cevap php

PHP ayın geçerli günün numarası (date ('j')) yanı sıra yılın geçerli günün sayısı (date ('z')) almak için yollar sağlar. Geçerli çeyrek geçerli günün numarasını almak için bir yolu var mı?

Yani şu anda, 5 Ağustos, üçüncü çeyrekte günü 36 olduğunu.

Bu hesaplama standart bir yolu varsa, herkes (prefereably PHP tabanlı) algoritması kullanışlı var mı?

4 Cevap

Ben aşağıdaki yöntemleri ile bir sınıf yazdım. Keyfini çıkarın.

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'));
}

Nasıl hakkında:

$curMonth = date("m", time());
$curQuarter = ceil($curMonth/3);

Et voila :-)

function date_quarter()
{
    return ceil(date('n', time()) / 3);
}

veya

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

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

    return 4;
}

(Bir şirketin mali yıl yılın herhangi bir ayında başlayabilir çünkü) bir takvim çeyrek ortalama varsayarsak, gün-bir yıl belirlemek için date ('z') güveniyor, ve daha sonra basit bir dizi tutmak olabilir gün her çeyrek başlıyor:

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

Sonra geçerli gün-of-yıl önce daha az ya da günün-of-yıl eşit olan en büyük başlangıç ​​günü bulun, sonra çıkarın.

Eğer artık yıl olarak farklı numaralar gerektiğini unutmayın.