Hafta içi bir öğenin yaşını Sayma sadece

2 Cevap php

Ben hafta içi bir şeyin yaşını saymaya çalışıyorum. Ben, bu sorunun ayrıntılı yöntemi denedim http://stackoverflow.com/questions/883615/given-a-date-range-how-to-calculate-the-number-of-weekends-partially-or-wholly-wi ama benim usecase uygun görünmüyor.

Bir öğe veritabanında oluşturulan DATETIME, ve ben, oluşturulan tarih 2 gün boyunca eski ise eski olarak işaretlemek gerekir. Ancak, istemci yaşı sadece hafta gün saymak (Pazartesiden Cumaya kadar) ve Sat + Sun dışlamak istedi.

Şimdiye kadar, benim sahte kod aşağıdaki gibi görünüyor,

now - created_datetime = number_of_days
for(i number_of_days)
  if(created_datetime - i)
    is a weekday, then age++

Bu ulaşmanın temizleyici bir yolu olmalı? Bir öğe bir hafta sonu bir gün arıyor, o yaşı her gün döngü, çok eski olsun sanki devir biraz etkileyecektir.

Herhangi bir fikir harika olurdu! Teşekkürler

2 Cevap

Sadece hafta içi kesin yaşını bilmek last 7 days kontrol etmelisiniz.

Here's the intuition:

Nesnenin, ömrü boyunca hafta sayısının toplam yaş çıkarın. Her 7 gün tam olarak 2 hafta sonları olduğunu unutmayın. Bu kalan günlerde hafta sonu gün sayısını (tam bir hafta değildir olanlar) ekleyin ve ömrü hafta sonu gün sayısı toplam zorunda. Hafta içi yaş almak için gerçek yaşı çıkarma.

int weekendCount = 0;
// Check the remainder days that are not in a full week.
for (int i = totalAge % 7; i < 7; i++) {
    if (created_datetime - i is weekend) {
        weekendCount++;
    }
}

weekdayAge = totalNumberOfDays  - (((totalNumberOfDays / 7) * 2) + weekendCount);

Note that the division is an integer division.

Biraz matematik ve dikkatli düşünce biraz ile yapabilirsiniz eminim. Sen madde oluşturulur ve haftanın hangi günü o anda oldu haftanın hangi gün kontrol etmeniz gerekir. Öncelikle, ben ilk başta yaptıklarını eminim gibi, o eski günlerin sayısını hesaplamak.

// if today is saturday, subtract 1 from the day. if its sunday, subtract 2
if (now() is sunday) $now = now() - 2 days;
if (now() is saturday) $now = now() - 1 day;

// same thing for $date posted.  but adding 1 or 2 days
if ( $date is saturday) $date = $date + 2;
if ( $date is sunday) $date = $date + 1;

// get days difference
$days = $today - $date;
// have to subtract 2 days for every 7
$days = $days - floor($days/7)*2

Bunu çalışıp çalışmadığını kontrol etmek olurdu. Belki hafta önce / sonra için tarih taşımadan hesaplama yapabilirsiniz. Mükemmel olmayabilir, ama onun doğru bir fikir olmayabilir. Yinelemek gerek yok.