• 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?

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
340 wizyt
pytanie zadane 1 lipca 2020 w JavaScript przez rafal.budzis Szeryf (85,380 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 (606,240 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 (214,530 p.)

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

komentarz 1 lipca 2020 przez Ehlert Ekspert (214,530 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 (606,240 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 (606,240 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 (606,240 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 (606,240 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 (606,240 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 (606,240 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 (606,240 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 (606,240 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 (606,240 p.)
Nie, bo to działa zupełnie inaczej, niż opisujesz.

Podobne pytania

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

93,187 zapytań

142,203 odpowiedzi

322,013 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2326p. - Łukasz Piwowar
  3. 2315p. - Łukasz Eckert
  4. 2301p. - CC PL
  5. 2269p. - Tomasz Bielak
  6. 2235p. - Łukasz Siedlecki
  7. 2232p. - rucin93
  8. 2006p. - Michal Drewniak
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1733p. - Marcin Putra
  14. 1586p. - Dawid128
  15. 1480p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...