Polskie wyświetlanie miesięcy w date-fns

3 min czyt.

Data po polsku

Chciałem mieć ładnie brzmiącą datę.

Kiedy wyświetlałem zestawienie wpisów i pokazywały się ich daty to chciałem żeby były one po polsku. Czyli pokazywało 15 grudnia czy 14 marca. W wersji orginalnej było oczywiści po angielsku.

Eng Date

Kod do tego wyglądał mniej więcej tak.

{format(new Date(parseISO(post.date)), 'MMMM d,yyyy'}

Po polsku tak?

Ja za to chciałem, żeby Dec zmienił się w grudzień. W domentacji date-fns w funkcji format znalazłem odniesienie do opcji locale.

Myśle sobie super hurra. I jedziemy z tym.

Poprzedni kod zmieniłem na

{format(new Date(parseISO(post.date)), 'd MMMM yyyy', {locale: pl})}

I jakieś było moje zdumenie kiedy SvelteKit wywalił mi błąd. Myślę, sobie tutaj tylko google może pomóc.

Dawaj bład w google i co wyskoczyło? Okazuje się, że jeszcze musiałem importować odpowiedni język do aplikacji.

Czyli mój kod wyglądał mniej więcej tak.

import { format, parseISO } from 'date-fns'
import pl from 'date-fns/locale'
...
{format(new Date(parseISO(post.date)), 'd MMMM yyyy', {locale: pl})}

Odpalam npm run dev i co widzę, że wszystko super śmiga.

Data po polsku

Myślę, sobie no to super. Sprawa załatwiona daty mamy po polsku.

Wszyskto dobrze napewno ?

No to teraz szybciutki deply na Vercel i co? Wywala błąd. Nie działa.

Myślę sobie no to ładnie, ale gdzie i jak. Przy zbudowaniu aplikacji na mojej maszynie żadnych błędów nie było.

Dobra to long story short, bo się z tym mocowałem naprwdę dłuższą chwilę.

Okazuję się, że poprzedni kod owszem dział w wersji dev ale przy wysłaniu na produkcjię trzeba jednak jeszcze trochę go zmienić. Rozwiązanie znalazłem na GitHubie w dyskucji właśnie o tym błędzie.

Poprawny kod wygląda tak:

import { format, parseISO } from 'date-fns'
import pl from 'date-fns/locale/pl/index'
...
{format(new Date(parseISO(post.date)), 'd MMMM yyyy', {locale: pl})}

Tyle i aż tyle

import pl from 'date-fns/locale/pl/index'

Ta końcówka /pl/index zmieniła wszyskto. Od teraz wszsytko chula jak możecie zobaczyć sami.