Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [javascript] new Date() -dzień później
adamantd
post 25.11.2012, 14:37:47
Post #1





Grupa: Zarejestrowani
Postów: 228
Pomógł: 7
Dołączył: 15.08.2012
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


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.  


Ten post edytował adamantd 25.11.2012, 14:38:57
Go to the top of the page
+Quote Post
Sebek87
post 25.11.2012, 15:36:57
Post #2





Grupa: Zarejestrowani
Postów: 74
Pomógł: 24
Dołączył: 21.10.2012
Skąd: Puławy

Ostrzeżenie: (0%)
-----


  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);
Go to the top of the page
+Quote Post
adamantd
post 25.11.2012, 15:44:33
Post #3





Grupa: Zarejestrowani
Postów: 228
Pomógł: 7
Dołączył: 15.08.2012
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Necsord
post 25.11.2012, 15:56:32
Post #4





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
adamantd
post 25.11.2012, 16:11:30
Post #5





Grupa: Zarejestrowani
Postów: 228
Pomógł: 7
Dołączył: 15.08.2012
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


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

Ten post edytował adamantd 25.11.2012, 16:12:15
Go to the top of the page
+Quote Post
Necsord
post 25.11.2012, 16:32:47
Post #6





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
adamantd
post 25.11.2012, 16:38:48
Post #7





Grupa: Zarejestrowani
Postów: 228
Pomógł: 7
Dołączył: 15.08.2012
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 16:53