Mogę dostać poniedziałek tego tygodnia z:
$monday = date_create()->modify('this Monday');
Z taką samą łatwością chciałbym uzyskać pierwszy dzień tego miesiąca. Jak mogę to osiągnąć?
Mogę dostać poniedziałek tego tygodnia z:
$monday = date_create()->modify('this Monday');
Z taką samą łatwością chciałbym uzyskać pierwszy dzień tego miesiąca. Jak mogę to osiągnąć?
Odpowiedzi:
Wymaga PHP 5.3 do działania („pierwszy dzień” jest wprowadzony w PHP 5.3). W przeciwnym razie powyższy przykład jest jedynym sposobem, aby to zrobić:
<?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');
W PHP 5.4+ możesz to zrobić:
<?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');
Jeśli wolisz zwięzły sposób, aby to zrobić i masz już rok i miesiąc w wartościach liczbowych, możesz użyć 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()
jeśli chcesz tylko pierwszego dnia bieżącego miesiąca . Można przekazać 'first day of this month'
do konstruktora DateTime bezpośrednio jak: $date = new DateTime('first day of this month')
. Tylko mówię ...
Oto czego używam.
Pierwszy dzień miesiąca:
date('Y-m-01');
Ostatni dzień miesiąca:
date('Y-m-t');
date('Y-m-t');
.
date('w', '2015-05-01');
, skończy się dzień wcześniej, a nie faktyczny. (To dałoby mi 4 zamiast prawidłowej 5).
$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
To wszystko, czego potrzebujesz:
$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())
wróci pierwszego dnia, a czas jest taki sam jak aktualny. Więc nie jest to pierwszy dzień o godzinie 0:00, jego pierwszy dzień i tak jak teraz. To rozwiązuje problem strtotime('first day of this month 00:00:00', time())
.
Obecnie używam tego rozwiązania:
$firstDay = new \DateTime('first day of this month');
$lastDay = new \DateTime('last day of this month');
Jedyny problem, na jaki się natknąłem, to ten dziwny czas. Potrzebowałem odpowiedniego zakresu dla naszego interfejsu wyszukiwania i skończyło się na tym:
$firstDay = new \DateTime('first day of this month 00:00:00');
$lastDay = new \DateTime('first day of next month 00:00:00');
Używam szalonego sposobu, aby to zrobić, używając tego polecenia
$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));
To wszystko
Ugly (i nie używa powyższego wywołania metody), ale działa:
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}
lub last day of this month
oba działają. Należy jednak pamiętać, że $ miesiąc musiałby być ciągiem znaków zawierającym nazwę miesiąca, np. „Styczeń”, łącznie z nazwą „grudzień”. Lub możesz po prostu użyć date('Y-m-t');
.
Używam tego do codziennej pracy cron, aby sprawdzić, czy powinienem wysłać wiadomość e-mail pierwszego dnia dowolnego miesiąca do moich partnerów. To o kilka linii więcej niż inne odpowiedzi, ale solidne jak skała.
//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;
}
używając metody daty powinniśmy być w stanie otrzymać wynik. to znaczy; data ('N / D / l', mktime (0, 0, 0, miesiąc, dzień, rok));
Na przykład
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
Wszystkie te specjalne wyrażenia php, w duchu, first day of ...
są świetne, chociaż raz po raz wychodzą mi z głowy.
Postanowiłem więc zbudować kilka podstawowych abstrakcji datetime i mnóstwo konkretnych implementacji, które są automatycznie uzupełniane przez dowolne IDE. Chodzi o to, aby znaleźć, jakie rzeczy. Podobnie jak, today
, now
, the first day of a previous month
, itd. Wszystkie te rzeczy, które wymienione są datetimes. W związku z tym istnieje wywoływany interfejs lub klasa abstrakcyjna ISO8601DateTime
oraz określone czasy danych, które ją implementują.
Kod w twoim konkretnym przypadku wygląda tak:
(new TheFirstDayOfThisMonth(new Now()))->value();
Więcej informacji na temat tego podejścia znajdziesz w tym wpisie .