Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmiana daty
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
TomASS
Hej.
Chciałbym zrobić coś takiego jak na stronie pkp, chodzi mi o pole Data. Gdy klika się na dodaj lub odejmij jeden dzień, to się zmienia. Doszedłem do czegoś takiego:
  1.  
  2. </head>
  3. function $(id){
  4. return document.getElementById(id);
  5. }
  6.  
  7. function init(){
  8. var d = new Date();
  9. var data = d.getDate()+'.'+d.getMonth()+'.'+d.getFullYear();
  10. $('napis2').value=data;
  11. }
  12. function change(){
  13. var str = $('napis2').value;
  14. var d = new Date();
  15. var tablica = str.split(".");
  16. d.setDate(parseInt(tablica[0])+1);
  17. d.setMonth(parseInt(tablica[1]));
  18. d.setFullYear(parseInt(tablica[2]));
  19. var data = d.getDate()+'.'+d.getMonth()+'.'+d.getFullYear();
  20. $('napis2').value=data;
  21. }
  22. <body onload="init();">
  23. <input type="text" id="napis2">
  24. <button onclick="change();">+</button>
  25. </body>
  26. </html>

Data niby się przełącza, ale jak dojdzie do końca miesiąca, to miesiąc się nie przełącza, czyli np. z 31.01 jak się doda jeden dzień to wychodzi 1.01 :/ (chociaż czasami, bardzo rzadko się przełącza). Dodatkowo mam problem jak zrobić słownie dni tygodnia :/

Dzięki za pomoc smile.gif
siemakuba
Takie coś powinno dać radę. Najlepiej bazować na timestampie.
  1. <script type="text/javascript">
  2.  
  3. var baseDate = new Date();
  4. baseDate = new Date(baseDate.getFullYear(), baseDate.getUTCMonth(), baseDate.getUTCMonth(),0,0,0,0);
  5. var timestampToday = baseDate.getTime();
  6.  
  7. function ChangeDate(change)
  8. {
  9. var newDate;
  10.  
  11. newDate = (change == 1 ? new Date(parseInt(timestampToday)-86400000) : new Date(parseInt(timestampToday)+86400000));
  12. return newDate;
  13. }
  14.  
  15. </script>


[i]ChangeDate(0) - jeden dzień do tyłu
ChangeDate(1)[/i]- jeden dzień do przodu

Cytat
Dodatkowo mam problem jak zrobić słownie dni tygodnia :/

dodstęp do dnia tygodnia masz za pomocą metody getDay() obiektu Date:

Kod
0 = Sunday
1 = Monday
2 = Tuesday
3 = Wednesday
4 = Thursday
5 = Friday
6 = Saturday


Odpowiednia tablica/obiekt z wartościami i już.

pozdr.
TomASS
Dzięki siemakuba, takie coś udało się nam wymodzić:
  1.  
  2. </head>
  3. <script type="text/javascript">
  4. function $(id){
  5. return document.getElementById(id);
  6. }
  7. function init(){
  8. var baseDate = new Date();
  9. baseDate = new Date(baseDate.getFullYear(), baseDate.getUTCMonth(), baseDate.getUTCMonth(),0,0,0,0);
  10. $('napis2').value= baseDate.getFullYear()+'-'+(baseDate.getMonth()+1)+'-'+baseDate.getDate();
  11. }
  12.  
  13.  
  14. function ChangeDate(change,inp)
  15. {
  16. var newDate;
  17.  
  18. $inpDate = $(inp).value.split('-');
  19.  
  20. var baseDate = new Date();
  21. baseDate = new Date(parseInt($inpDate[0],10), (parseInt($inpDate[1],10)-1), parseInt($inpDate[2],10),0,0,0,0);
  22. var timestampToday = baseDate.getTime();
  23.  
  24. newDate = (change == 1 ? new Date(parseInt(timestampToday)-86400000) : new Date(parseInt(timestampToday)+86400000));
  25. $(inp).value= newDate.getFullYear()+'-'+(newDate.getMonth()+1)+'-'+newDate.getDate();
  26. }
  27.  
  28. <body onLoad="init();">
  29. <input type="text" id="napis2">
  30. <button onclick="ChangeDate(0,'napis2');">+</button>
  31. <button onclick="ChangeDate(1,'napis2');">-</button>
  32. </body>
  33. </html>

link
tylko przy zmianie daty, idąc w górę, gdy trafimy na datę 2006-10-29, to dalej nie chce się kręcić, gdy zmienimy ręcznie ma 2006-10-30 to już dalej idzie w porządku :/ nie może tylko przeskoczyć bariery 2006-10-29 :/
siemakuba
@TomASS: błąd który zauważyłeś został jeszcze w funkcji init() u ciebie. Jest dwa razy baseDate.getUTCMonth() :)

To niestety nie ma wpływu na opisany powyżej błąd. Co zauważyłem: wpisanie innego roku niż 2006 powoduje, że "data graniczna" też staje się inna. Przykładowo, dla roku 2005 nie można pójść dalej niż 2006-10-29. Może to kogoś naprowadzi.

Nie mam teraz czasu żeby na to jeszcze raz spojrzeć, ale kolejna szybka myśl: na początku dałem wszystko w czasie UTC, bo uznałem, że to nie ma znaczenia. Może zmiana na GMT pomoże?

javascriptowy obiekt Date

pozdr.
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.