Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [javascript] new Date() -dzień później
Forum PHP.pl > Forum > Po stronie przeglądarki
adamantd
Witam nie mogę sobie poradzić z datą. W bardzo dużym uproszczeniu wygląda to tak, że w jednym polu input user korzystając z datepickera jQuery UI wybiera datę np '2012-11-23' i do dyspozycji ma kolejne pole input w którym wybiera kolejną datę (datę zakończenia) z tym, że po wybraniu pierwszej daty w drugim polu input pojawia mu się data o jeden dzień później od wybranej poprzednio.

  1.  
  2. var dpr = '2012-11-23';
  3.  
  4. var dateTbl = dpr.split('-');
  5. var newDa = new Date(dateTbl[0], dateTbl[1], dateTbl[2]);
  6. newDa.setTime(newDa.getTime()+(3600*24));
  7. alert(newDa.getDate())//wciąż pokazuje się 23 a nie oczekiwane przeze mnie 24
  8.  
Sebek87
  1. var date = new Date();
  2.  
  3. var input_date = '2012-11-23'; // data w pierwszym inpucie
  4. var date_part = input_date.split('-');
  5.  
  6. var day = ++date_part[2]; // dzień w przód
  7.  
  8. date.setDate(day);
  9.  
  10. var date_ahead = date_part[0] + '-' + date_part[1] + '-' + date.getDate();
  11.  
  12. alert(date_ahead);
adamantd
Działa dzięki -choć nie rozumiem dlaczego bo próbowałem podobnie i kiedy kończył się miesiąc np pierwsza data była 31 to druga wyświetlona alertem miała wartość 32..
A tak na przyszłość nie wiesz dlaczego nie dało się ustawić time() na time()+3600*24 questionmark.gif w PHP zawsze działa bez problemu w JS zawsze jest jakiś problem -w przykładzie który podałem

  1.  
  2. var dpr = '2012-11-23';
  3.  
  4. var dateTbl = dpr.split('-');
  5. var newDa = new Date(dateTbl[0], dateTbl[1], dateTbl[2]);
  6.  
  7.  
  8. newDa.setTime(newDa.getTime()+(3600*24));//TO DZIAŁANIE USTAWIAŁO TIME ALE NIE MIAŁ ON WPŁYWU MIMO WSZYSTKO NA DZIEŃ PONIŻEJ WYŚWIETLONY ALERTEM
  9.  
  10.  
  11.  
  12. alert(newDa.getDate())//wciąż pokazuje się 23 a nie oczekiwane przeze mnie 24
  13.  
  14.  
  15.  



pytanie dlaczego?
Necsord
W PHP używałeś funkcji, które bazowały na timestamp'ie, który ma dokładność sekundową, a JS'owy date używa milisekund.

[JAVASCRIPT] pobierz, plaintext
  1. var date = new Date();
  2. // Sun Nov 25 2012 15:50:12 GMT+0100 (Central European Standard Time)
  3. date.setTime(date.getTime()+(3600*24));
  4. // Sun Nov 25 2012 15:51:39 GMT+0100 (Central European Standard Time)
  5. date.setTime(date.getTime()+(3600*24*1000)); // 1 sekunda = 1000 milisekund
  6. // Mon Nov 26 2012 15:51:39 GMT+0100 (Central European Standard Time)
[JAVASCRIPT] pobierz, plaintext
adamantd
Nescord -gdzieś ten elementarny szczegół mi uciekł, to ważne spostrzeżenie -dzięki, z tym, że nadal jest problem..


  1.  
  2. var dprTabTmp = $dpr.val().split('-');
  3. var newDaplusOne = new Date(dprTabTmp[0], dprTabTmp[1], dprTabTmp[2]);
  4. newDaplusOne.setTime(newDaplusOne.getTime()+3600*24*1000);
  5. $dpr2.val(fullData(newDaplusOne.getFullYear()+'-'+newDaplusOne.getMonth()+'-'+newDaplusOne.getDate()));
  6.  
  7.  
  8. //$dpr to drugie pole input w którym ma się ukazać data wskazująca na dzień później
  9.  


wrzuciłem kawałek mojego kodu -
1. Wszystko działa poprawnie w momencie kiedy w pierwszym polu input zostaje wybrany dzień każdy inny oprócz ostatniego dnia miesiąca
2. wybierając 31 grudnia w $dpr2 poprawnie zostaje umieszczona data 2013-01-01 (po obróbce funkcją fullData dodającą zera tam gdzie powinny być a ich nie ma)
3. Problem pojawia się w miesiącach innych niż grudzień np listopad ma 30 dni. W momencie wybrania w pierwszym polu dnia 30 w drugim pokazuje się 31
4. Kiedy wybiorę dzień 31 w pierwszym polu to w drugim pokazuje się następny miesiąc oraz dzień 02....

nie mogę zrozumieć dlaczego smile.gif
Necsord
Jeżeli dobrze rozumiem twój problem, to jest on wynikiem tego, że Date przyjmuje jako drugi parametr miesiąc z tym, że miesiące zaczynaja się od zera, czyli 0 => styczeń.

[JAVASCRIPT] pobierz, plaintext
  1. var dpr = '2012-11-23';
  2. var dateTbl = dpr.split('-');
  3. var newDa = new Date(dateTbl[0], dateTbl[1], dateTbl[2]);
  4. // Sun Dec 23 2012 00:00:00 GMT+0100 (Central European Standard Time)
  5. // 23 Grudnia 2012
  6.  
  7. var dpr = '2012-11-23';
  8. var dateTbl = dpr.split('-');
  9. var newDa = new Date(dateTbl[0], dateTbl[1] - 1, dateTbl[2]);
  10. // Fri Nov 23 2012 00:00:00 GMT+0100 (Central European Standard Time)
  11. // 23 Listopada 2012
[JAVASCRIPT] pobierz, plaintext
adamantd
  1.  
  2. var dprTabTmp = $dpr.val().split('-');
  3. var newDaplusOne = new Date(dprTabTmp[0], dprTabTmp[1]-1, dprTabTmp[2]);//TUTAJ BYŁ BŁĄD :)
  4. newDaplusOne.setTime(newDaplusOne.getTime()+3600*24*1000);//TUTAJ TEŻ WCZEŚNIEJ Z TYM TYSIĄCEM
  5. $dpr2.val(fullData(newDaplusOne.getFullYear()+'-'+newDaplusOne.getMonth()+'-'+newDaplusOne.getDate()));
  6.  



Oczywiście, że tak smile.gif teraz wszystko działa tak jak należy -kiedy wcześniej robiłem -1 to nie robiłem *1000 a kiedy już robiłem *1000 to zapomniałem o tym, że ma być -1 w setMonth, teraz oba błędy są poprawione

dzięki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.