Mam taki kod PHP:
$monthNum = sprintf("%02s", $result["month"]);
$monthName = date("F", strtotime($monthNum));
echo $monthName;
Ale December
raczej wraca niż August
.
$result["month"]
jest równe 8, więc sprintf
funkcja dodaje a, 0
aby to zrobić 08
.
strtotime
nie ma pojęcia, co próbujesz zrobić. Alternatywnie po prostu użyj przełącznika do czegoś takiego.strtotime
nie ma pojęcia, co oznacza „8”.strtotime
analizuje pełne sygnatury czasowe, takie jak „2012-05-12 08:43:12”. Co w tym kontekście oznacza „8”?echo date( "F", time() );
:? Na przykładecho date( "F", strtotime("2019-03-09") );
wyświetli „Marzec”Odpowiedzi:
Zalecany sposób, aby to zrobić:
W dzisiejszych czasach naprawdę powinieneś używać obiektów DateTime do dowolnej matematyki związanej z datą / godziną. Wymaga to wersji PHP> = 5.2. Jak pokazano w odpowiedzi Glavicia , możesz użyć:
Znak
!
formatujący służy do resetowania wszystkiego do epoki Uniksa . Znakm
formatu to liczbowa reprezentacja miesiąca z zerami na początku.Alternatywne rozwiązanie:
Jeśli używasz starszej wersji PHP i nie możesz w tej chwili zaktualizować, możesz skorzystać z tego rozwiązania. Drugi parametr
date()
funkcji akceptuje znacznik czasu i możesz go użyć,mktime()
aby go utworzyć, na przykład:Jeśli chcesz mieć 3-literową nazwę miesiąca
Mar
, zmieńF
naM
. Listę wszystkich dostępnych opcji formatowania można znaleźć w dokumentacji podręcznika PHP .źródło
Tylko dlatego, że wszyscy używają funkcji strtotime () i date (), pokażę przykład DateTime :
źródło
DateTime::createFromFormat('m|', $result['month']);
do resetowania tylko brakujących pól.strftime()
.Zastosowanie
mktime()
:Zobacz podręcznik PHP: http://php.net/mktime
źródło
"m"
zwróci miesiąc jako dwucyfrową liczbę jako astring
. np. styczeń = 01, luty = 02strtotime
oczekuje standardowego formatu daty i przekazuje znacznik czasu.Wydaje się, że przekazujesz
strtotime
jedną cyfrę, z której ma zostać wyprowadzony format daty.Powinieneś używać tego,
mktime
który przyjmuje elementy daty jako parametry.Twój pełny kod:
Jednak funkcja mktime nie wymaga początkowego zera do numeru miesiąca, więc pierwsza linia jest całkowicie niepotrzebna i
$result["month"]
można ją przekazać bezpośrednio do funkcji.Następnie można to wszystko połączyć w jeden wiersz, odzwierciedlając datę w wierszu.
Twój refaktoryzowany kod:
...
źródło
date("F", mktime(null, null, null, 2));
wracaMarch
zamiastFebruary
.mktime
użyje dnia bieżącego. Dzisiaj jest 31. Jaki jest 31 lutego? :)1
nie jest podawany jako piąty parametr,mktime
ale jako trzeci parametr,date
który nie przyniósłby oczekiwanych rezultatówAby dokonać konwersji w odniesieniu do aktualnych ustawień regionalnych, możesz użyć
strftime
funkcji:date
nie szanuje regionu,strftime
tak.źródło
$monthName = utf8_encode(strftime('%B', mktime(0, 0, 0, $monthNumber)));
, aby wyświetlić zaakcentowane znaki, jak w „Août”Jeśli chcesz po prostu tablicę nazw miesięcy od początku roku do końca, np. Aby wypełnić listę rozwijaną, użyłbym tylko następującego;
źródło
Istnieje wiele sposobów wydrukowania miesiąca z podanego numeru. Wybierz jeden zestaw dla siebie.
1. funkcja date () wraz z parametrem „F”
Przykład kodu:
2. Tworząc obiekt daty php za pomocą funkcji createFromFormat ()
Przykład kodu
3. Funkcja strtotime ()
4. funkcja mktime ()
5. Używając jdmonthname ()
źródło
dostosować zgodnie z wymaganiami
źródło
Jeśli masz numer miesiąca, możesz najpierw utworzyć na jego podstawie datę z domyślną datą pierwszego i domyślnego roku bieżącego roku, a następnie wyodrębnić nazwę miesiąca z utworzonej daty:
Ten kod zakłada, że numer miesiąca jest przechowywany w $ i
Mam nadzieję, że to komuś pomoże
źródło
Znalazłem to na https://css-tricks.com/snippets/php/change-month-number-to-month-name/ i działało idealnie.
źródło
jest to banalnie proste, dlaczego tak wielu ludzi robi takie złe sugestie? @Bora była najbliższa, ale ta jest najsolidniejsza
to jest sposób na zrobienie tego
źródło
Obecnie używam poniższego rozwiązania, aby rozwiązać ten sam problem:
Aby dowiedzieć się więcej o ustawieniach lokalnych, przejdź do http://php.net/manual/en/function.setlocale.php
Aby dowiedzieć się więcej o strftime, przejdź do http://php.net/manual/en/function.strftime.php
Ucfirst()
jest używany do zamiany pierwszej litery w ciągu na wielką literę.źródło
źródło
Musisz ustawić pola za pomocą
strtotime
lubmktime
Z
mktime
zestawem tylko miesiąc. Spróbuj tego:źródło
użyj powyższego kodu
źródło
To dla wszystkich potrzeb konwersji daty i czasu
źródło
źródło
Myślę, że użycie cal_info () jest najłatwiejszym sposobem konwersji z liczby na ciąg.
Zobacz dokumentację dla cal_info ()
źródło
Posługiwać się:
źródło
gregoriantojd
ijdmonthname
znajdują się w rozszerzeniu kalendarza i wymagają kompilacji PHP,--enable-calendar
chyba że używasz systemu Windows.Wiem, że to pytanie zostało zadane jakiś czas temu, ale doszedłem do wniosku, że każdy, kto szukał tej odpowiedzi, prawdopodobnie starał się po prostu uniknąć pisania całych stwierdzeń if / else, więc napisałem to dla Ciebie, abyś mógł skopiować / wkleić. Jedynym zastrzeżeniem związanym z tą funkcją jest to, że dotyczy ona rzeczywistego numeru miesiąca, a nie liczby indeksowanej 0, więc styczeń = 1, a nie 0.
źródło
Aby uzyskać nazwę miesiąca, podając numer miesiąca
Gdzie „F” zwróci nazwę miesiąca Np. 'Może'
źródło
Tak to zrobiłem
zwroty
30 June 2019
źródło
Proste sztuczki tutaj możesz użyć funkcji strtotime () działającej zgodnie z potrzebami, konwertuj liczbę na nazwę miesiąca.
1.Jeśli chcesz otrzymać wynik w styczniu, lutym i marcu Następnie spróbuj poniżej jednego z parametrem „M” wewnątrz daty.
Wyjście: maj
/ 2. Możesz spróbować użyć litery „F” zamiast „M”, aby uzyskać pełną nazwę miesiąca jako wynik styczeń, luty, marzec itd.
Wyjście: styczeń
źródło
To wydobywa miesiące.
źródło
Użyj funkcji natywnej, takiej jak
jdmonthname()
:źródło
jdmonthname(3, CAL_MONTH_GREGORIAN_LONG);
powracaNovember
Możesz po prostu użyć funkcji monthname () w SQL.
Wybierz nazwę miesiąca (kolumna_data) z grupy tabeli według nazwy miesiąca (kolumna_data)
źródło