Uh, mam kłopoty, John Conde odpowiedział na pytanie, na które odpowiedziałem, ale zapomniałem wspomnieć, że musi działać na 5.2, więc faktycznie skorzystam z odpowiedzi Mr-sk ...
pihentagy
Odpowiedzi:
260
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 =newDateTime('first day of this month');
echo $d->format('jS, F Y');// First day of a specific month
$d =newDateTime('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 (newDateTime('first day of this month'))->format('jS, F Y');
echo (newDateTime('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
Pamiętaj, że nie musisz przez nie przechodzić, ->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ę ...
Jest to zdecydowanie najprostszy i najbardziej czytelny sposób rozwiązania tego problemu według IMO, jeśli wszystko, czego potrzebujesz, to ciąg znaków reprezentujący datę.
Markus Amalthea Magnuson
5
Ostatni dzień miesiąca można było wtedy złapać za pomocą date('Y-m-t');.
Mark Tomlin
7
FYI: „t” in date („Ym-t”) zawsze reprezentuje liczbę dni w tym samym miesiącu. Świetny i prosty sposób na sprawdzenie ostatniego dnia bieżącego miesiąca.
Pascal Klein,
1
Jeśli użyję tego, aby spróbować uzyskać dzień tygodnia date('w', '2015-05-01');, skończy się dzień wcześniej, a nie faktyczny. (To dałoby mi 4 zamiast prawidłowej 5).
PBwebD
5
To jest po prostu genialne. Rozwinąłem to trochę, aby podać minimalne i maksymalne granice czasu w miesiącu, wykonując: $monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
H2ONOCK
32
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/>';
Jest to zgrabne rozwiązanie, jednak 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()).
Kalle H. Väravas
22
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');
To jest fajne, ale mam pewne problemy pierwszego dnia miesiąca. Tak więc, jeśli dzisiaj jest 1 września, godzina 11:00. Dostanę 1 sierpnia! Muszę sprawdzić, czy dzisiaj jest to „1”, a jeśli tak, użyj „teraz”. dziwne (Php 7.3.9)
Jacob Christensen
@JacobChristensen jeszcze tego nie doświadczył. Jak to naprawiłeś?
Nikola Petkanski
To prawda, php wydaje się nie być zbyt fajnym w tej pierwszej i ostatniej. $ n = nowy \ DateTime ('pierwszy dzień'. (nowy \ DateTime ()) -> format ('F')); „pierwszy dzień stycznia”. To samo dzieje się w tygodniu, kiedy jest poniedziałek i jest to trochę ... frustrujące :)
Jacob Christensen
20
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"));
poza tematem, ale jak obliczyłbyś ostatni dzień miesiąca przy tym samym scenariuszu.
LoneWOLFs
@LoneWOLFs last day of {$month} {$year}lub last day of this monthoba 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');.
Mark Tomlin
3
Możesz to zrobić w ten sposób:
$firstday = date_create()->modify('first day January 2010');
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 stopif($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 ISO8601DateTimeoraz określone czasy danych, które ją implementują.
Kod w twoim konkretnym przypadku wygląda tak:
(newTheFirstDayOfThisMonth(newNow()))->value();
Więcej informacji na temat tego podejścia znajdziesz w tym wpisie .
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ć:
W PHP 5.4+ możesz to zrobić:
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()
:źródło
->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:
Ostatni dzień miesiąca:
źródło
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:
źródło
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 problemstrtotime('first day of this month 00:00:00', time())
.Obecnie używam tego rozwiązania:
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:
źródło
Używam szalonego sposobu, aby to zrobić, używając tego polecenia
To wszystko
źródło
W php 5.2 możesz użyć:
źródło
Ugly (i nie używa powyższego wywołania metody), ale działa:
źródło
last day of {$month} {$year}
lublast 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');
.Możesz to zrobić w ten sposób:
źródło
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.
źródło
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
źródło
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 abstrakcyjnaISO8601DateTime
oraz określone czasy danych, które ją implementują.Kod w twoim konkretnym przypadku wygląda tak:
Więcej informacji na temat tego podejścia znajdziesz w tym wpisie .
źródło