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

Dziwne zachowanie getTime()

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
279 wizyt
pytanie zadane 10 lutego 2022 w JavaScript przez Pieselosek Nowicjusz (160 p.)

Dzień dobry.

Mam zadanie aby sprawdzić która osoba jest starsza bazując na ich dacie urodzenia. Chciałem użyć metody getTime ale daje ona wyniki bez sensu. Data 02/02/2005 zwraca więcej ms niz 02/02/2000. W funkcji zadanie 1 wszystko działa jak powinno.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>



</head>
<body style="background-color: grey;">
    
<script type="text/javascript">

    function zadanie1()
    {
        var data =  new Date;
        var ileteraz = data.getTime();
        var urodzenie = new Date(prompt("Podaj date urodzenia mm/dd/yyyy")); // data urodzin do wpisania
        var ileurodzenie = urodzenie.getTime();
        var upływCzasu = ileteraz-ileurodzenie;
        var dni = Math.floor(upływCzasu / (1000 * 3600 * 24));
        if ( dni >= (18*365) )
        {
            alert("Jesteś pełnoletni");
        } else {
           alert("Jesteś niepełnoletni");
        }
    }
    


    function zadanie2()
    {

        // var data1 = new Date( prompt( ("Podaj pierwszą date urodzenia mm/dd/yyyy") ) );

        // var data2 = new Date( prompt( ("Podaj drugą date urodzenia mm/dd/yyyy") ) );    

        var data1 = new Date( "02/02/2005");

        var data2 = new Date( "02/02/2000" );    

        console.log (data1.getTime() );

        console.log(data2.getTime() );


        if (data1.getTime() < data2.getTime())
        {
            alert("Druga osoba jest starsza");
        }

        if (data1.getTime() > data2.getTime())
        {
            alert("Pierwsza osoba jest starsza");
        }
       
        if (data1.getTime() == data2.getTime())
        {
            alert("Osoby są w tym samym wieku");
        }
    }

</script>




<button onclick="zadanie1()">Kliknij aby sprawdzić czy jesteś pełnoletni (z1) </button>
<br>
<button onclick="zadanie2()">Kliknij aby sprawdzić która osoba jest starsza (z2) </button>

    
</body>
</html>


1
komentarz 11 lutego 2022 przez VBService Ekspert (256,320 p.)
edycja 11 lutego 2022 przez VBService

smiley

Data wpisu: 02.10.2022 (mm/dd/yyyy) czyli pełnoletnia: 02/10/2004 

 

granica błędu ok. 6 dni: 02/10/2004  - 02/15/2004  

function zadanie1()
{
  // data urodzin do wpisania
  var urodzenie = (new Date(prompt('Podaj date urodzenia mm/dd/yyyy'))).getTime(); 
  var lat = (Date.now() - urodzenie) / (1000 * 3600 * 24 * 365);
  alert('Jesteś ' + ((lat >= 18) ? '' : 'nie') + 'pełnoletni');
}

 

granica błędu ok. 3 dni: 02/10/2004  - 02/12/2004

function zadanie1()
{
  // data urodzin do wpisania
  var urodzenie = (new Date(prompt('Podaj date urodzenia mm/dd/yyyy'))).getTime(); 
  var lat = (Date.now() - urodzenie) / (1000 * 3600 * 24 * 365);
  alert('Jesteś ' + ((lat >= 18.01) ? '' : 'nie') + 'pełnoletni');
}

 

1 odpowiedź

+2 głosów
odpowiedź 11 lutego 2022 przez VBService Ekspert (256,320 p.)
wybrane 14 lutego 2022 przez Pieselosek
 
Najlepsza

getTime ale daje ona wyniki bez sensu. Data 02/02/2005 zwraca więcej ms niz 02/02/2000

getTime działa prawidłowo, ponieważ zwraca ilość milisekund jakie "upłynęły" od 01.01.1970 roku (ECMAScript epoch) do podanej daty. Czyli osoba z teoretycznie "mniejszą" datą ma wartość w milisekundach większą, bo data tej osoby jest bardziej "oddalona" od ECMAScript epoch. Potrzebujesz "odwrócić" sytuację i pobrać dodatkowo wartość "graniczą" z np.: Date.now()

To jest to co zrobiłeś w zadaniu 1

var upływCzasu = ileteraz-ileurodzenie;

 

 

przykład

function zadanie2()
{
  // var data1 = (new Date(prompt('Podaj pierwszą date urodzenia mm/dd/yyyy'))).getTime();
  // var data2 = (new Date(prompt('Podaj drugą date urodzenia mm/dd/yyyy'))).getTime();    

  const test = [
    { 'osoba1':'02/02/2000', 'osoba2':'02/02/2005' },
    { 'osoba1':'02/02/2005', 'osoba2':'02/02/2000' },
    { 'osoba1':'02/02/2005', 'osoba2':'02/02/2005' }
  ];

  for (let row of test) {
    const data1 = Date.now() - (new Date(row.osoba1)).getTime(),
          data2 = Date.now() - (new Date(row.osoba2)).getTime();

    console.log(data1, data2);

    if (data1 == data2)
      alert("Osoby są w tym samym wieku");            
    else
      alert(((data1 > data2) ? 'Pierwsza' : 'Druga') + ' osoba jest starsza');       
  }           
}

 

komentarz 14 lutego 2022 przez Pieselosek Nowicjusz (160 p.)
Rzeczywiście źle pomyślałem :p

Podobne pytania

0 głosów
1 odpowiedź 179 wizyt
pytanie zadane 28 października 2017 w JavaScript przez Filip2248 Dyskutant (8,840 p.)
0 głosów
0 odpowiedzi 226 wizyt
0 głosów
2 odpowiedzi 341 wizyt
pytanie zadane 1 lutego 2019 w JavaScript przez Bakr Mądrala (6,850 p.)

93,187 zapytań

142,201 odpowiedzi

322,012 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - rucin93
  6. 2006p. - Michal Drewniak
  7. 2005p. - Łukasz Siedlecki
  8. 1964p. - CC PL
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1586p. - Dawid128
  14. 1520p. - Marcin Putra
  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!

...