DateTime nesnesi olarak date_modify kullanarak php'de geçerli ayın ilk günü


157

Bu haftanın Pazartesi gününü aşağıdakilerle alabilirsiniz:

$monday = date_create()->modify('this Monday');

Bu ayın 1'inde aynı kolaylıkla almak istiyorum. Bunu nasıl başarabilirim?


Başım belada, John Conde cevapladığım soruyu yanıtladı, ancak 5.2 üzerinde çalışması gerektiğini belirtmeyi unutuyorum, bu yüzden aslında Mr-
sk'nin

Yanıtlar:


260

Çalışmak için PHP 5.3 gerektirir (PHP 5.3'te "ilk gün" tanıtılır). Aksi takdirde yukarıdaki örnek bunu yapmanın tek yoludur:

<?php
    // First day of this month
    $d = new DateTime('first day of this month');
    echo $d->format('jS, F Y');

    // First day of a specific month
    $d = new DateTime('2010-01-19');
    $d->modify('first day of this month');
    echo $d->format('jS, F Y');

    // alternatively...
    echo date_create('2010-01-19')
      ->modify('first day of this month')
      ->format('jS, F Y');

PHP 5.4+ sürümünde şunları yapabilirsiniz:

<?php
    // First day of this month
    echo (new DateTime('first day of this month'))->format('jS, F Y');

    echo (new DateTime('2010-01-19'))
      ->modify('first day of this month')
      ->format('jS, F Y');

Bunu yapmak için kısa bir yol tercih ediyorsanız ve zaten yıl ve ayı sayısal değerlerde kullanıyorsanız, şunları kullanabilirsiniz date():

<?php
    echo date('Y-m-01'); // first day of this month
    echo date("$year-$month-01"); // first day of a month chosen by you

9
Eğer geçmek zorunda kalmamasıdır Not ->modify()sadece ilk gününü istiyorsanız geçerli ay . Sen geçebilir 'first day of this month'gibi doğrudan DateTime kurucusuna: $date = new DateTime('first day of this month'). Sadece söyleyerek ...
Dzhuneyt

334

İşte kullandığım.

Ayın ilk günü:

date('Y-m-01');

Ayın son günü:

date('Y-m-t');

10
İhtiyacınız olan tek şey tarihin bir dize temsiliyse, bu IMO'yu açıklamak için en basit ve en okunabilir yoldur.
Markus Amalthea Magnuson

5
Daha sonra ayın son günü kullanılarak yakalanabilir date('Y-m-t');.
Mark Tomlin

7
Bilginize: Tarihteki 't' ('Ym-t') her zaman o aydaki gün sayısını temsil eder. Bu ayın son gününü almanın harika ve basit bir yolu.
Pascal Klein

1
Bunu haftanın gününü almak için date('w', '2015-05-01');kullanırsam, o zaman gerçek gün yerine bir gün önce sona ererim. (Bu bana doğru 5 yerine 4 verir).
PBwebD

5
Bu sadece mükemmel. Yaparak ay içinde min ve max sınırları vermek için biraz genişlettim: $monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
H2ONOCK

32

İhtiyacınız olan her şey bu:

$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());

$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());

$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());

echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';

echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';

echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';

4
Bu düzgün bir çözümdür, ancak strtotime('first day of this month', time())ilk gün geri döner ve zaman akımla aynıdır. İşte orada, ilk günü saat 0: 00'da değil, ilk günü ve şimdi olduğu gibi. Bu onu düzeltir strtotime('first day of this month 00:00:00', time()).
Kalle H. Väravas

22

Şu anda bu çözümü kullanıyorum:

$firstDay = new \DateTime('first day of this month');
$lastDay = new \DateTime('last day of this month');

Ortaya çıkan tek sorun, garip zamanın ayarlanması. Arama arayüzümüz için doğru aralığa ihtiyacım vardı ve bununla sonuçlandım:

$firstDay = new \DateTime('first day of this month 00:00:00');
$lastDay = new \DateTime('first day of next month 00:00:00');

Bu harika, ama ayın ilk günü bazı sorunlar yaşıyorum. Bugün 1 Eylül 11:00 ise. 1 Ağustos alacağım! Aslında bugün "1" olup olmadığını kontrol etmek gerekir ve eğer öyleyse "şimdi" kullanın. tuhaf (Php 7.3.9)
Jacob Christensen

@JacobChristensen henüz tecrübe etmedi. Nasıl düzelttin?
Nikola Petkanski

Çok doğru, php dikişler bu ilk ve son hakkında çok serin olmamalı. $ n = new \ DateTime ('ilk günü'. (yeni \ DateTime ()) -> biçim ('F')); "Ocak ayının ilk günü". Aynı gün Pazartesi olduğunda ve biraz ... sinir bozucu :)
Jacob Christensen

20

Bunu yapmak için çılgın bir yol kullanıyorum bu komutu kullanıyor

$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));

Bu kadar


6

Php 5.2'de şunları kullanabilirsiniz:

<? $d = date_create();
print date_create($d->format('Y-m-1'))->format('Y-m-d') ?>

4

Çirkin, (ve yukarıdaki yöntem çağrınızı kullanmaz), ancak çalışır:

echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));   

ancak aynı senaryo altında ayın son gününü nasıl hesaplarsınız?
LoneWOLFs

@LoneWOLF'ler last day of {$month} {$year}veya last day of this monthher ikisi de çalışır. Ancak, $ ayının "Aralık" gibi "Aralık" olarak düşünülen ayın adını içeren bir dize olması gerektiğini unutmayın. Veya sadece kullanabilirsiniz date('Y-m-t');.
Mark Tomlin

3

Bunu şu şekilde yapabilirsiniz:

$firstday = date_create()->modify('first day January 2010');

3

Bunu iştiraklerime herhangi bir ayın ilk günü e-posta göndermem gerekip gerekmediğini kontrol etmek için günlük cron işi ile kullanıyorum. Diğer cevaplardan birkaç satır daha ama bir kaya gibi sağlam.

//is this the first day of the month?
$date = date('Y-m-d');
$pieces = explode("-", $date);
$day = $pieces[2];

//if it's not the first day then stop
if($day != "01") {

     echo "error - it's not the first of the month today";
     exit;

}

2

tarih yöntemini kullanarak sonucu elde edebilmeliyiz. örneğin; tarih ('N / D / l', mktime (0, 0, 0, ay, gün, yıl));

Örneğin

echo date('N', mktime(0, 0, 0, 7, 1, 2017));   // will return 6
echo date('D', mktime(0, 0, 0, 7, 1, 2017));   // will return Sat
echo date('l', mktime(0, 0, 0, 7, 1, 2017));   // will return Saturday

0

Tüm bu özel php ifadeleri, ruhu içinde first day of ...harika, ama tekrar tekrar kafamdan çıkıyorlar.

Bu yüzden herhangi bir IDE tarafından otomatik olarak tamamlanan birkaç temel datetime soyutlama ve tonlarca özel uygulama oluşturmaya karar verdim. Nokta bulmaktır neyi şeylerin -Kind. Gibi today, now, the first day of a previous month, ben listeledik şeylerden vb tüm olan tarihsaat. Bu nedenle, bir arabirim veya soyut sınıf varISO8601DateTime ve onu uygulayan belirli tarihler vardır.

Özel durumunuzdaki kod şöyle görünür:

(new TheFirstDayOfThisMonth(new Now()))->value();

Bu yaklaşım hakkında daha fazla bilgi için bu girişe bir göz atın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.