• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czy można zaprogramować parsowanie relatywnej daty w oparciu o momentJS?

VPS Starter Arubacloud
0 głosów
234 wizyt
pytanie zadane 1 lipca 2020 w JavaScript przez rafal.budzis Szeryf (85,260 p.)
Hej zastanawiam się czy na podstawie stringów takich jak :

- W zeszły czwartek
- Wczoraj
- Jutro
- Za dwa dni

Jestem w stanie stworzyć obiekt moment JS z odpowiednią datą? Jeśli nie moment JS to jesteście w stanie polecić jakąś inną bibliotekę która będzie umiała parsować takie wyrażenia na poprawną datę?

3 odpowiedzi

+1 głos
odpowiedź 1 lipca 2020 przez Comandeer Guru (599,730 p.)

Hm, jedyne, co mi przychodzi do głowy, to Locutus (dawne phpjs) i ichniejsza implementacja strtotime. Oczywisty problem jest taki, że funkcja ta parsuje daty po angielsku, ale może być sensownym punktem wyjścia do stworzenia własnego rozwiązania.

0 głosów
odpowiedź 1 lipca 2020 przez Ehlert Ekspert (212,630 p.)

Ostatnio walczyłem z tym. Najlepszą robotę zrobił pajtonowy dateparser

komentarz 1 lipca 2020 przez Ehlert Ekspert (212,630 p.)

Idealny case na crobie z jakiegoś małego api np z wykorzystaniem: https://fastapi.tiangolo.com/

–1 głos
odpowiedź 1 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Myślę, że niepotrzebna Ci do tego żadna biblioteka ;)

Stwórz po prostu obiekt Date() i w zależności od tego, który mamy rok, miesiąc oraz dzień miesiąca, odejmij lub dodaj odpowiednią ilość dni lub/i lat/miesięcy
komentarz 1 lipca 2020 przez Comandeer Guru (599,730 p.)
W jaki sposób obliczysz to dla "zeszłego czwartku"?
komentarz 1 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
W oparciu o getDay() obliczę ile dni minęło od zeszłego czwartku, wiedząc, że jego wartość wynosi  4
komentarz 1 lipca 2020 przez Comandeer Guru (599,730 p.)
Najpierw musisz wiedzieć, że chodzi o zeszły i czwartek, a więc musisz zaimplementować parsowanie stringów. Dopiero mając string "zeszły czwartek" podzielony na tokeny jesteś w stanie dojść do tego, że chodzi o konkretny dzień tygodnia w przeszłości i na tej podstawie dopiero można robić jakiekolwiek obliczenia.
komentarz 1 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Do dzielenia stringa dobrze w moim odczuciu sprawdziłby się split() ustawiony na wyszukiwanie spacji

Potem tylko ifami sprawdzać dla tablicy czy pierwsze jest zeszły czy następny i jaki jest następny wyraz tablicy
komentarz 1 lipca 2020 przez Comandeer Guru (599,730 p.)
Ok, to mamy "zeszły czwartek". A co z "następna środa"?
komentarz 1 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Dokładnie to samo, sprawdzasz pierwszy wyraz czy jest równy "następny" lub "następna", potem czy drugi to "środa" a na końcu tak jak wcześniej liczysz ile brakuje do środy za pomocą getDay()
komentarz 1 lipca 2020 przez Comandeer Guru (599,730 p.)
Ok. A co z "za dwa dni" i "dwa dni temu"? Ify dla liczebników i zaimków brzmią mocno nieporęcznie.
komentarz 1 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Bardzo podobnie,

tak jak poprzednio sprawdzanie pierwszego wyrazu tablicy, pobieranie dnia tygodnia, a potem sprawdzamy ile brakuje do środy (3)
komentarz 1 lipca 2020 przez Comandeer Guru (599,730 p.)
Ale właśnie ta procedura nie działa, bo tutaj ważny jest pierwszy lub ostatni wyraz. Dodatkowo sprawdzanie pojedynczo liczebników nie brzmi dobrze.
komentarz 1 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Co masz namyśli? Nie znam biblioteki, która rozumiałby znaczenie polskiego słowa "jedenaście" i umiała na tym wykonywać jakiś obliczeń (np. liczenie dnia, który będzie za 11 dni)

I dlaczego ta procedura nie zadziała?
komentarz 2 lipca 2020 przez Comandeer Guru (599,730 p.)

I dlaczego ta procedura nie zadziała?

Bo sprawdzasz tylko pierwszy wyraz, a on nie musi świadczyć o tym, w którą stronę trzeba liczyć. To można ustalić dopiero po sparsowaniu wszystkich elementów i ustaleniu relacji między nimi.

 Co masz namyśli? 

Mam na myśli konieczność stworzenia pełnoprawnego parsera liczebników. Inaczej ugrzęźniemy w bagnie ifów. 

komentarz 2 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Zasadniczo masz rację, mój sposób był zaprojektowany dla modelu: jutro/pojutrze/przedwczoraj/za x dni/x dni temu (Tak jak przykład autora pytania). A co do parsera, to rzeczywiście nie jest to zły pomysł :p

Jednak nadal nie jest potrzebna żadna biblioteka...
komentarz 2 lipca 2020 przez Comandeer Guru (599,730 p.)
No nie jest, ale pisanie takiego parsera również nie jest rzeczą trywialną. Nakład pracy, jaki trzeba w to włożyć, jest niewspółmierny do efektu (parsowanie stringu do daty).
komentarz 2 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Ale tak jak mówiłem, jest jakaś biblioteka, która wie co to znaczy np. "jedenaście"?

Chodzi mi o rozumienie polskich liczebników
komentarz 2 lipca 2020 przez Comandeer Guru (599,730 p.)
Nie, ale są biblioteki robiące konwersję w drugą stronę, np. https://github.com/lukszymanski/digit-words – zmiana tej implementacji, żeby wypluwała liczbę na podstawie słowa nie wygląda na trudną i na pewno zajmie mniej czasu niż próba napisania tego od zera.
komentarz 2 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Zgadzam się.

Czyli właściwe moja odpowiedź była własnościwa?
komentarz 2 lipca 2020 przez Comandeer Guru (599,730 p.)
Nie, bo to działa zupełnie inaczej, niż opisujesz.

Podobne pytania

0 głosów
1 odpowiedź 124 wizyt
0 głosów
1 odpowiedź 202 wizyt
pytanie zadane 13 listopada 2022 w JavaScript przez kordix Gaduła (3,910 p.)
0 głosów
2 odpowiedzi 134 wizyt
pytanie zadane 12 kwietnia 2019 w JavaScript przez Whereismycode Obywatel (1,710 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...