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?
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?
Yanıtlar:
Ç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
->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 ...
İşte kullandığım.
Ayın ilk günü:
date('Y-m-01');
Ayın son günü:
date('Y-m-t');
date('Y-m-t');
.
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).
$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
İ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/>';
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())
.
Ş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');
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
Ç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')))));
last day of {$month} {$year}
veya last day of this month
her 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');
.
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;
}
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
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 .