Nasıl bir tarihten önce günün tarihini öğrenebilirsiniz?

7 Cevap php

Ben önceki yılın aynı tarih aralığında geçerli tarihe mali yıl kadar karşılaştıran bir sistemi var. Sen bakmak için yıl ve ay ayarlayabilirsiniz ve her zaman bir önceki yılın aynı tarih aralığını karşılaştırır. Ben geçerli gün artık gün ise geçen yıl 28 karşılaştırır böylece ayarlanmış olması ve geçen yıl artık yıl oldu ve bugün 28 Şubat ise o 29 kadar geçen yıl karşılaştırır. aksi takdirde geçerli tarihe kadar, o ayın son gününe kadar gösterir geçerli ay başka bir ay bakarsanız.

Tamam şu an gayet iyi çalışıyor, ama şimdi benim işverenler onlar dünün bugüne kadar gitmek istiyorum geçerli tarihe kadar olmak istemiyorum. Bunu nasıl yapabilirim, benim ana kaygılar bugün ne ayın 1, ya da ne varsa bugün mali yılın ilk günü ise.

İşte şimdi var kodu:

function create_YTD_XML()
{
    global $month;
    global $year;

    $last_year = $year - 1;

    if($year == date('Y') && $month == date('m'))
    {
        $this_day = date('d');
    }
    else
    {
        $this_day = date('t', mktime(0, 0, 0, $month, 1, $year)); // LAST DAY OF MONTH
    }

    if(is_leap_year($year) && $this_day == 29)
    {
        $last_day = 28;
    }
    else if(is_leap_year($last_year) && $this_day == 28)
    {
        $last_day = 29;
    }
    else
    {
        $last_day = $this_day;
    }

    if($month >= 2)
    {
        $this_year_start = $year;
        $last_year_start = $last_year;
    }
    else
    {
        $this_year_start = $year - 1;
        $last_year_start = $last_year - 1;
    }

    $this_ytd_start = $this_year_start.'-02-01';
    $last_ytd_start = $last_year_start.'-02-01';

    $this_ytd_end = $year.'-'.str_pad($month, 2, "0", STR_PAD_LEFT).'-'.$this_day;
    $last_ytd_end = $last_year.'-'.str_pad($month, 2, "0", STR_PAD_LEFT).'-'.$last_day;


}

Ne iyi çözüm olurdu?

Teşekkürler!

7 Cevap

strtotime() hile yapacak. mktime(), daha sonra bu gibi kullanmak kullanarak bir Unix zaman damgasına önceki tarih dönüştürmek:

$from_unix_time = mktime(0, 0, 0, $month, $day, $year);
$day_before = strtotime("yesterday", $from_unix_time);
$formatted = date('Y-m-d', $day_before);

Sen (mktime üzerine "yanlış" değerleri ile çalışmak için) 'yeteneğini güvenebilirsiniz. Geçerli gün vardır dolarlık yıl, $ ay $ ve gün varsayalım.

$yesterday = mktime (0, 0, 0, $month, $day - 1, $year);
echo date ('Y-m-d', $yesterday);

Sadece doğru olanı yapacağız, Merak etmeyin: Farklı değerleri ile kendinizi deneyin.

Note: şu cevabı dikkate yaz saati almaz; yılın belirli zamanlarında, bir hatalı sonuç dönecektir. Daha fazla bilgi için açıklamalara bakınız.


Bir günün uzunluğu (86.400 saniye) sabit olduğundan, belirli bir tarihten önce gün damgası belirlemek için aritmetik kullanabilirsiniz:

$yesterday = date('Y-m-d', strtotime($current_date) - 86400);

$current_date Eğer bir gün önce bulmak istediğiniz tarihtir. Zaten bir unix timestamp ise, strtotime() tamamen vazgeçemez:

$yesterday = date('Y-m-d', $current_date_as_unix_timestamp - 86400);

Ayrıca words Bunun gibi kullanarak strtotime işlevini kullanabilirsiniz:

$date = '2012-11-08';
$day_before = date( 'Y-m-d', strtotime( $date . ' -1 day' ) );

Çıkış $day_before,

2012-11-07

Ben sizin işveren istediği davranışa bağlıdır düşünüyorum. "Doğru" cevap-eğer bugün bir mali yıl başlangıç, onlar son iki mali yıl veya (Eğer tarih "kadar" olarak dün kullanılırsa ne olur ki) karşılaştırıldığında görmek istiyorum istiyorlar var son gününde 1 ile karşılaştırıldığında, bu mali yılın günü 1 görmek için? Sen otur ve potansiyel kenar durumlarda anlamaya ve sonra ne istedikleri hakkında işveren ile konuşmak gerekir.

Ayrıca kod, eser aşağıdakileri kullanabilirsiniz:

$current_date = strtotime('25-11-2012');
echo $yesterday = date('Y-m-d', strtotime('-1 day', $current_date));

Ve kod çıktısı aşağıdaki gibidir:

2012-11-24

Ben bu şekilde gerçekten strtotime kullanabilirsiniz:

$date="2014-02-20";
echo date("Y-m-d",strtotime($date." -1 day"));

çıktısı:

2014-02-19