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

złe obliczenia w dacie z lutym

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
165 wizyt
pytanie zadane 21 lutego 2019 w JavaScript przez aniaska4 Obywatel (1,010 p.)
edycja 21 lutego 2019 przez aniaska4

mam problem w wliczeniu daty jeśli chodzi o luty, który ma mniej dni niż inne m-ce. Napisałam kod, który wylicza mi żeby po wpisaniu daty do inputa odejmował mi 1 dzień i dodawał 3 mce. I wszystko super gra prócz daty 01.03.2019r. Ponieważ mam ustawioną funkcję, że najpierw odejmuje mi 1 dzień (zostaje 28.02.2019) a potem dodaje 3 mce (zostaje 28.06.2019) - to wylicza mi to błędnie i to chyba jedyny przypadek, że to jest błędne. Chciałabym to zamienić, - najpierw dodawać 3 mce a potem odejmować dzień, ale wtedy sypie mi się funkcja. Może ktoś coś doradzi?

document.querySelector('#a').addEventListener('input', function () {
                        var ts = Date.parse(this.value);
                    
                            if (isNaN(ts)) {
                                return;
                            }
                        var date = new Date(new Date(ts) -86400000); // w milisekundach - x(1) dni x 24 godzin, 60 minut x 60 sekund x 1000 milisekund
                        
                        date.setMonth(date.getMonth() +4); //dodaje 3 mce
                        var y = date.getFullYear();
                        var m = date.getMonth(); // JS numeruje miesiące od 0 do 11
                        var d = date.getDate();
                        console.log(d);
                        
                        document.querySelector('#b').value = y + '-' + (m > 9 ? '' : '0') + m + '-' + (d > 9 ? '' : '0') + d;
                }, false);

 

1 odpowiedź

0 głosów
odpowiedź 21 lutego 2019 przez rafal.budzis Szeryf (85,380 p.)

Zamiast 

new Date(new Date(ts) -86400000);

Możesz odejmować jeden dzień w taki sam sposób jaki dodajesz miesiące.

date.setDate(date.getDate() - 1)

 

komentarz 21 lutego 2019 przez aniaska4 Obywatel (1,010 p.)
no własnie jak tak robię to od 01-03-2019 wychodzi mi 00-03-2019. Nie wiem jak to sparsować, żeby wskakiwała kolejna dzień. Bo wcześniej odejmuje w tych milisekundach i jest ok ale tutaj to się też nie sprawdza, nie wiem dlaczego
komentarz 21 lutego 2019 przez rafal.budzis Szeryf (85,380 p.)
Jeśli możesz pokaż kod który zwraca Ci datę "00-03-2019" postaramy się coś na to zaradzić ;)
komentarz 21 lutego 2019 przez aniaska4 Obywatel (1,010 p.)

ok, poprawiłam i rzeczywiście zmieniło mi date, ale cały czas wydaje mi się, że źle liczy.. Cały czas wpisuje 2019-03-01 i teraz wyskakuje mi 2019-05-30 - a powinien 2019-05-31

 document.querySelector('#a').addEventListener('input', function () {
                        var ts = Date.parse(this.value);
                    
                            if (isNaN(ts)) {
                                return;
                            }
                        var date = new Date(new Date(ts));
                        
                        date.setMonth(date.getMonth() +4); //dodaje 3 mce (+1 dla JSa)
                        date.setDate(date.getDate() - 1); //odejmuje 1 dzień
                        var y = date.getFullYear();
                        var m = date.getMonth(); 
                        var d = date.getDate();
                        
                        document.querySelector('#b').value = y + '-' + (m > 9 ? '' : '0') + m + '-' + (d > 9 ? '' : '0') + d;
                }, false);
<form style="font-size: 20px; font-weight: 700;" name="date" action="">
                wpisz datę wystawienia faktury w formacie <br />rok/miesiąc/dzień:<br />
                <div style="width: 40px; font-size: 20px; margin: 10px;"><input type="data" id="a" /></div>
                
        </form>
        <form style="font-size: 20px; font-weight: 700;" name="date"; action="">
                data końcowa:
                <div style="width: 40px; font-size: 20px; margin: 10px;"><input type="data" id="b" /></div>
        </form>

Czy to parsowanie na początku jest potrzebne? napisałam je, aby mi zawsze prawidłowo pobierało dane, ale w sumie zastanawiam się..

Podobne pytania

+2 głosów
2 odpowiedzi 134 wizyt
pytanie zadane 27 października 2023 w JavaScript przez Ziom54d4 Początkujący (350 p.)
0 głosów
0 odpowiedzi 418 wizyt
pytanie zadane 24 maja 2022 w JavaScript przez Piotr Popławski Użytkownik (610 p.)
0 głosów
2 odpowiedzi 657 wizyt
pytanie zadane 12 stycznia 2020 w JavaScript przez saseta00 Użytkownik (700 p.)

93,096 zapytań

142,056 odpowiedzi

321,505 komentarzy

62,438 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

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!

...