Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: JS dodawanie wartości, błędy
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Ciubas
Mam taki kod:

  1. <script language="JavaScript">
  2. function update(ev) {
  3.  
  4. var data_od=document.forms.ev['start_time'].value;
  5.  
  6.  
  7.  
  8.  
  9. var d = data_od;
  10.  
  11.  
  12.  
  13. var data = d.split('-');
  14. data[2] = parseInt(data[2]) + 1;
  15.  
  16. var data_do = data[0] + '-' + data[1] + '-' + data[2];
  17.  
  18.  
  19.  
  20.  
  21.  
  22. document.forms.ev['end_time'].value=data_do;
  23. } ;
  24.  
  25.  
  26. ...
  27. <select class="inputbox" name="start_time" onChange="update(this.form)">
  28. <option value="2011-07-10">Niedziela - 2011-07-10</option>
  29. <option value="2011-07-11">Poniedziałek - 2011-07-11</option>
  30. <option value="2011-07-12">Wtorek - 2011-07-12</option>
  31. <option value="2011-07-13">Środa - 2011-07-13</option>
  32. <option value="2011-07-14">Czwartek - 2011-07-14</option>
  33. <option value="2011-07-15">Piątek - 2011-07-15</option>
  34. <option value="2011-07-16">Sobota - 2011-07-16</option>
  35. <option value="2011-07-17">Niedziela - 2011-07-17</option>
  36. <option value="2011-07-18">Poniedziałek - 2011-07-18</option>
  37. <option value="2011-07-19">Wtorek - 2011-07-19</option>
  38. <option value="2011-07-20">Środa - 2011-07-20</option>
  39. <option value="2011-07-21">Czwartek - 2011-07-21</option>
  40. <option value="2011-07-22">Piątek - 2011-07-22</option>
  41. <option value="2011-07-23">Sobota - 2011-07-23</option>
  42. ...
  43.  
  44. <input style=" width: 140px; " type="text" name="end_time" value="2011-07-11" />
  45. ...


Nie wiem dlaczego, ale czasami jak jest np. data 2011-07-09 i js dodaje mi wartość to zamiast 10 robi mi się 1 tak jak by 0 nie czytał, może mi ktoś pomóc z tym problemem?

wszerad
Bo w dniach miesiąca nie ma zera, jest jak w kalendarzu od 1-31 natomiast 0 jest w miesiącach 0-styczeń, 1-luty,...
Ciubas
Totalnie nic nie rozumiem z Twojej wypowiedzi.

Napisałem że mam dzień: 09 dodaję do niego podanym skryptem +1 i zamiast 10 - otrzymuje wynik 1...
wszerad
Sorry miałem co innego w głowie, jest taki fajny trick, że kiedy w obiekcie daty ustawisz miesiąc jako 13(oczywiście takiego nie ma, 11=grudzień) to obiekt będzie zawierał następny rok a miesiąc luty. Wracając do twojego kodu to: parseInt("09") zwraca liczbę 0 dlatego sprecyzuj że chodzi ci o system dziesiątkowy tak:
  1. data[2] = parseInt(data[2],10) + 1;
Ciubas
No to super, teraz mam dodatkowy problem: 31 + 1 = 32 a nie następny miesiąc + 1, jak to zmienić, macie jakiś szybki pomysł? smile.gif
thek
[JAVASCRIPT] pobierz, plaintext
  1. var d1 = new Date (),
  2. d2 = new Date ( d1 );
  3. d2.setDate ( d1.getDate() + 15 );
  4. alert ( d2 );
[JAVASCRIPT] pobierz, plaintext
d1 to data obecna... d2 to data za 15 dni smile.gif Kombinusz jak koń pod górkę niepotrzebnie. Pracuj na obiekcie Date w JS, a nie baw się ze stringiem to JS sam sobie "przeskoczy" do następnego miesiąca/roku jeśli wykryje ten fakt. Wszerad dobrze ten fakt Ci już zaanonsował w swoim poście, więc tym tropem powinieneś pójść.
Ciubas
Wielkie dzięki, jeszcze ostatnie moje pytanie:

  1. <script language="JavaScript">
  2. function update(ev) {
  3.  
  4. var data_od=document.forms.ev['start_time'].value;
  5.  
  6.  
  7. data_od = new Date (data_od);
  8. data_do = new Date ( data_od );
  9. data_do.setDate ( data_od.getDate() + 1 );
  10. var curr_date = data_do.getDate();
  11. var curr_month = data_do.getMonth();
  12. curr_month++;
  13. var curr_year = data_do.getFullYear();
  14. data_do = curr_year + "-" + curr_month + "-" + curr_date;
  15. document.forms.ev['end_time'].value=data_do;
  16. } ;
  17.  


Jest jakiś prostszy format daty? Bo nic co by działało nie znalazłem :/
wszerad
Twój kod po optymalizacji, jeżeli to co podałeś działało to to chyba też będzie.

  1. <script language="JavaScript">
  2. function update(ev) {
  3. var data=new Date (document.forms.ev['start_time'].value); //nie ma tu błędu? Bo powinien być i w twoim skrypcie też. Jeżeli jest źle to usuń tą linie i skasuj klamry poniżej.
  4. /*
  5. var data = document.forms.ev['start_time'].value.split('-');
  6. data = new Date(data[0],data[1],data[2]);
  7. */
  8. data.setDate(data_od.getDate()+1);
  9. document.forms.ev['end_time'].value=data.getFullYear() + "-" + (data.getMonth()+1) + "-" + data.getDate();
  10. } ;
  11. </script>
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.