Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zmiana daty, Kłopot z obiektem Date()
TomASS
post 8.10.2006, 10:26:38
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


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

Ten post edytował TomASS 8.10.2006, 10:27:00


--------------------
Go to the top of the page
+Quote Post
siemakuba
post 9.10.2006, 08:52:25
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


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.
Go to the top of the page
+Quote Post
TomASS
post 9.10.2006, 10:10:16
Post #3





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


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 :/


--------------------
Go to the top of the page
+Quote Post
siemakuba
post 9.10.2006, 12:50:57
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


@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.
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: 25.07.2025 - 09:44