Wpis z mikrobloga

Mam problem z wyświetlaniem daty w angularze z konkretnymi dniami tygodnia i miesiącami słownie

Chciałbym używać formatu: np. "pon. 5 grudnia".
Z API dostaje już konkretny DateTime (biblioteka Luxon - następca moment.js)

I tutaj zaczyna się problem bo mogę użyć DatePipe i wtedy ładnie mi te datę sformatuje, ale dostałem polecenie żeby spróbować to zrobić bez pipe, a na funkcjach, które już są w bibliotece Luxon np. MojaData.ToLocalString(format)...

Niestety o ile DatePipe wyświetla mi dobrze datę (z dobrym językiem aplikacji - nie muszę robić tłumaczeń na dni tygodnia, a język aplikacji != język przeglądarki) to wszystkie funkcje z Luxon nie widzę by działały w sposób podobny do datePipe, ponieważ biorą dany język z przeglądarki, a nie ten ustawiony przez użytkownika.

dlaczego DatePipe bierze poprawnie język do dni tygodnia a DateTime.ToLocalString już nie?

Tymczasowo wyciągam Locale_Id (nie co to do końca) i przekazuje do metody ToLocalString i działa... Ale to rozwiązanie wygląda jak gówno i próbuje zrozumieć dlaczego tak się dzieje.

Jestem dość nowy w angularze, więc nie wiem jak te ustawienia lokalizacyjne w ogóle działają i gdzie są zapisywane (wiem że język użytkownika zapisujemy w bazie)

Za wszelkie rady, podpowiedzi z góry dziękuję.

#angular #frontend #javascript
  • 5
Ustaw locale dla całej apki przez Settings.defaultLocale = "pl";
Locale powinieneś mieć gdzieś trzymane w state aplikacji razem z innymi defaultowymi settingsami apki
@MarceloFerro: na pewno nie dostałeś polecenia by tego nie robić pipe’m, bo to jedyne słuszne rozwiązane (i w sumie najbardziej podręcznikowy powód użycia pipe’a jaki istnieje xd). Twoje rozwiązanie powinno wyglądać tak, ze stworzysz własnego customowego pipe’a, który będzie przyjmował datę i zwracał właściwy format (czyli wypluty przez bibliotekę, a potem przetworzony przez toLocalString z Localeid jako parametrem tej metody).

Dlaczego to działa w DatePipe? Bo dokładanie takie samo rozwiązanie
@dzejro miałem coś takiego


Gdzie EventTime to był właśnie DateTime

Dostałem zwrotke że kiepsko to wygląda z pytaniem czy cały czas faktycznie trzeba użyć ToDateIso i ewentualnie mam spróbować inaczej to zrobić

Z tego co mówisz to zrobić wrappera na DatePipe albo całkiem nowy pipe i wtedy byłoby najładniej - w sumie podoba mi się to rozwiązanie, zrobię to tak

Pytanko jeszcze jak obejść coś takiego
@MarceloFerro: dostałeś zwrotkę ze kiepsko to wyglada nie dlatego ze używasz pipe’a, a ze używasz metody toDateIso.
Wywołujesz metodę w HTML-u co powoduje ze angular musi ja wywołać za każdym razem gdy idzie change detection cycle - skoro jesteś nowy to prawdopobnie piszesz tez mało optymalnie, a wiec wywolasz te metodę kilkaset-kilka tysięcy razy gdy użytkownik będzie na twoim widoku * liczba custom eventow. Warto zapamiętać ze z HTMLa nigdy nie