W projektach frontendowych często pojawia się potrzeba manipulacji datami – czy to do obliczania terminów, czy do formatowania dat w bardziej czytelny sposób. Inny przykład, to użycie minimalnej lub maksymalnej daty w komponencie kalendarza, czy walidatora (np. wymagamy aby wprowadzona data urodzenia należała do osoby dorosłej). Dziś przyjrzymy się, jak można to zrobić w Vue 3, korzystając z funkcji getAdjustedDate oraz popularnej biblioteki moment.js. Przykład pisany jest w Composition API z wykorzystaniem TypeScript, ale myślę, że jak ktoś używa np VUE 2 i pisze w Options API, da sobie radę z przerobieniem omawainwgo kodu.
Importowanie Moment.js
Na początek, musimy zaimportować moment.js, który ułatwia nam pracę z datami:
import moment from 'moment';
Moment.js jest jedną z najpopularniejszych bibliotek do manipulacji i formatowania dat w JavaScript. Zapewnia łatwe w użyciu funkcje, które pomogą nam rozwiązać wiele problemów związanych z datami.
Funkcja getAdjustedDate
Nasza funkcja getAdjustedDate służy do obliczania nowej daty na podstawie przesunięcia o określoną liczbę dni, miesięcy lub lat względem podanej daty. Jeśli nie podamy daty początkowej, funkcja użyje bieżącej daty.
/**
* Get date before or after n days, months or years
* @param n number of days, months or years
* @param type days, months or years
* @param date date to start from (default is current date). May be string (example: '2024-01-25') or Date object
* @param format return date format (default is 'YYYY-MM-DD')
*/
export const getAdjustedDate = (n: number, type: string, date?: any, format?: string) => {
date = date || new Date();
format = format || 'YYYY-MM-DD';
const newDate = new Date(date);
if (type === 'days') {
newDate.setDate(newDate.getDate() + n);
} else if (type === 'months') {
newDate.setMonth(newDate.getMonth() + n);
} else if (type === 'years') {
newDate.setFullYear(newDate.getFullYear() + n);
}
return moment(newDate).format(format);
};
Jak działa getAdjustedDate?
Parametry:
- n: Liczba dni, miesięcy lub lat, o które chcemy przesunąć datę.
- type: Jednostka czasu (days, months, years).
- date: Data początkowa (opcjonalna, domyślnie bieżąca data). Może być w formie stringa (np. '2024-01-25′) lub obiektu Date.
- format: Format zwracanej daty (opcjonalny, domyślnie 'YYYY-MM-DD’).
Ustawienie domyślnych wartości:
Jeśli date nie jest podana, ustawiamy ją na bieżącą datę. Jeśli format nie jest podany, domyślnie zwrócona zostanie data w formacie ’YYYY-MM-DD’.
Tworzenie nowej daty:
Tworzymy nowy obiekt Date na podstawie podanej daty lub bieżącej daty.
Modyfikacja daty:
W zależności od wartości type, przesuwamy datę o n dni, miesięcy lub lat. Wartość ujemna odejmuje od wybranej daty podaną ilość dni, miesięcy lub lat.
Formatowanie i zwracanie daty:
Korzystamy z moment.js do sformatowania nowej daty zgodnie z podanym formatem i zwracamy ją.
Mam nadzieję, że ten artykuł pomógł wam zrozumieć, jak używać tej funkcji w waszych projektach. Jeśli macie pytania, dajcie znać w komentarzach! Gotowy kod do pobrania wraz z przykładem użycia dostępny na GitHub Gist.