Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Przetwarzanie daty z selecta
viamarimar
post
Post #1





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


Prosty kod na przetwarzanie daty date podaje w formacie XXXX-xX-XX, a powinno sie zwrocic kiedy,x nazwa xxxx(na tej zasadzie)
Calosc jest niby ok tylko z selecta zawsze jest zwracany default, pomoze ktos?

  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Untitled Document</title>
  6. </head>
  7.  
  8. <body>
  9. <?php
  10. #echo "<b>PRZYKŁAD</b><br>";
  11. #echo "#Zakładając, że dzis mamy ".date("j-m-Y") ." to ".date("j-m-Y",mktime(0,0,0,date("n"),date("j")-2,date("Y")))." to jest przedwczoraj.<br>";
  12. ?>
  13.  
  14.  
  15.  
  16. <?php
  17. echo "Podaj date w formacie YYYY-MM-DD"; ?>
  18. <form action="plik2.php" method="POST">
  19. Wpisz date:<input type="text" name="data" /><br /><br />
  20. <input type="submit" value="Wyślij" name="submit"/>
  21. <input type="submit" value="Reset" name="submit2"/>
  22. </form>
  23. <?
  24. if (isset($_POST['submit'])) {
  25.  
  26.  
  27.  
  28. #date("F j, Y", strtotime("yesterday"));
  29.  
  30. $data=$_POST['data'];
  31. if(!empty($data)){
  32. if(preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/" , $data)) {
  33.  
  34. $dni_tygodnia = array( 'niedziela', 'poniedziałek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota' );
  35. $dzien_tygodnia = date("w",strtotime($data));
  36. $miesiac = date("n",strtotime($data));
  37. $miesiace = array(1 => 'stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca', 'sierpnia', 'września', 'października', 'listopada', 'grudnia');
  38. $dzien = date("j",strtotime($data));
  39. $rok = date("Y",strtotime($data));
  40.  
  41. #date("j-m-Y",mktime(0,0,0,date("n"),date("j")-2,date("Y")))." to jest przedwczoraj.<br>";
  42.  
  43.  
  44. $za_3_dni=date("j-m-Y",mktime(0,0,0,date("n"),date("j")+3,date("Y")));
  45. $pojutrze= date("j-m-Y",mktime(0,0,0,date("n"),date("j")+2,date("Y")));
  46. $jutro= date("j-m-Y",mktime(0,0,0,date("n"),date("j")+1,date("Y")));
  47. $dzisiaj= date("j-m-Y",mktime(0,0,0,date("n"),date("j"),date("Y")));
  48. $wczoraj= date("j-m-Y",mktime(0,0,0,date("n"),date("j")-1,date("Y")));
  49. $dwa_dni_temu= date("j-m-Y",mktime(0,0,0,date("n"),date("j")-2,date("Y")));
  50. $trzy_dni_temu= date("j-m-Y",mktime(0,0,0,date("n"),date("j")-3,date("Y")));
  51. $tydzien_temu= date("j-m-Y",mktime(0,0,0,date("n"),date("j")-7,date("Y")));
  52. $za_tydzien= date("j-m-Y",mktime(0,0,0,date("n"),date("j")+7,date("Y")));
  53. $miesiac_temu= date("j-m-Y",mktime(0,0,0,date("n")-1,date("j"),date("Y")));
  54. $za_miesiac= date("j-m-Y",mktime(0,0,0,date("n")+1,date("j"),date("Y")));
  55. $rok_temu= date("j-m-Y",mktime(0,0,0,date("n"),date("j"),date("Y")-1));
  56. $za_rok= date("j-m-Y",mktime(0,0,0,date("n"),date("j"),date("Y")+1));
  57. $dwa_tyg_temu= date("j-m-Y",mktime(0,0,0,date("n"),date("j")-14,date("Y")));
  58. $za_dwa_tyg= date("j-m-Y",mktime(0,0,0,date("n"),date("j")+14,date("Y")));
  59.  
  60. switch ($data)
  61. {
  62. case $wczoraj:
  63. $kiedy= "wczoraj";
  64. break;
  65. case $dwa_dni_temu:
  66. $kiedy= "przedwczoraj";
  67. break;
  68. case $trzy_dni_temu:
  69. $kiedy= "trzy dni temu";
  70. break;
  71. case $dzisiaj:
  72. $kiedy= "dzisiaj".", ".date("G:i:s",mktime(date("G"),date("i"),date("s")));
  73. break;
  74. case $jutro:
  75. $kiedy= "jutro";
  76. break;
  77. case $pojutrze:
  78. $kiedy= "pojutrze";
  79. break;
  80. case $za_3_dni:
  81. $kiedy= "za 3 dni";
  82. break;
  83. case $tydzien_temu:
  84. $kiedy= "tydzien temu";
  85. break;
  86. case $za_tydzien:
  87. $kiedy= "za tydzień";
  88. break;
  89. case $miesiac_temu:
  90. $kiedy= "miesiąc temu";
  91. break;
  92. case $za_miesiac:
  93. $kiedy= "za miesiąc";
  94. break;
  95. case $rok_temu:
  96. $kiedy= "rok temu";
  97. break;
  98. case $za_rok:
  99. $kiedy= "za rok";
  100. break;
  101. case $dwa_tyg_temu:
  102. $kiedy= "2 tygodnie temu";
  103. break;
  104. case $za_dwa_tyg:
  105. $kiedy= "za 2 tygodnie";
  106. break;
  107. case $mc:
  108. $kiedy= "ubiegły miesiąc";
  109. break;
  110. default:
  111. $kiedy= "nie kojarzę, kiedy to było, ale za to wiem, w jaki dzień wypada";
  112. }
  113.  
  114. echo $kiedy.", ".$dni_tygodnia[ $dzien_tygodnia ].", ".$dzien." ".$miesiace[$miesiac]." ".$rok." roku.";
  115.  
  116. }
  117. else{
  118. echo "Nie podales daty!";
  119. }
  120.  
  121. }
  122. else{
  123. echo "Podaj date!";
  124. }
  125.  
  126. }
  127.  
  128. ?>
  129. </body>
  130. </html>
  131.  
  132.  
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Po pierwsze: tu nie ma zadnego SELECTA....

Po drugie: sam piszesz, ze date wpisujesz w formacie Y-m-d, no ale potem porownujesz ją z formatem j-m-Y.... Ty naprawdę się dziwisz, że ci to się nie porównuje (IMG:style_emoticons/default/questionmark.gif)

Poza tym masz duzy błąd logiczny w wyniku którego Twoj kod, jesli poprawisz format sprawdzanej daty, bedzie ci zawsze zwracał $dzisiaj... Teraz daty budujesz na podstawie podanej daty wiec trudno oczekiwac by zgadzała się jakaś inna data niż $dzisiaj. Swoje daty masz budować na podstawie chwili obecnej a nie na podstawie podanej daty. Mysl troszke.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Dlaczego nie użyjesz sobie DateTime do tego wszystkiego? Prostsze, czytelniejsze. Poza tym nie musisz operować na datach, wystarczy że sprawdzisz różnicę w dniach od dziś.
Go to the top of the page
+Quote Post
tzm
post
Post #4





Grupa: Zarejestrowani
Postów: 675
Pomógł: 58
Dołączył: 17.12.2013

Ostrzeżenie: (10%)
X----


Cytat(Pyton_000 @ 7.11.2014, 07:41:30 ) *
Dlaczego nie użyjesz sobie DateTime do tego wszystkiego? Prostsze, czytelniejsze. Poza tym nie musisz operować na datach, wystarczy że sprawdzisz różnicę w dniach od dziś.



Nie lubisz czasem koła od nowa odkryć?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Kół u mnie w piwnicy już sporo leży (IMG:style_emoticons/default/smile.gif) Teraz za kwadraty się zabrałem (IMG:style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
viamarimar
post
Post #6





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


Przepraszam chodzilo o switcha oczywiscie i o to czemu sie zle wykonuje

mozesz mi uzmyslowic ten blad logiczny bo nie bardzo rozumiem??

Ten post edytował viamarimar 7.11.2014, 11:36:42
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to czemu się źle wykonuje już ci przecież napisałem.
Go to the top of the page
+Quote Post
viamarimar
post
Post #8





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


"Swoje daty masz budować na podstawie chwili obecnej a nie na podstawie podanej daty. "

czyli zakladam ze mam pobrac date z kompa lub z serwera ale odgornie mam zalozenie ze to ktos podaje date i po przetrawieniu tego php mowi mu czy to jest dzis wczoraj jutro itd od wprowadzonej daty wiec nie moze byc tak jak ty to napisales, że data na podstawie teraz [ moze wczoraj bylem zmeczony ale rozumowanie bylo dobre]

Ten post edytował viamarimar 7.11.2014, 12:43:37
Go to the top of the page
+Quote Post
Pyton_000
post
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Pobierasz datę Teraz. Pobierasz datę z Input np.
Sprawdzasz różnicę w datach.
Jak na + to w przyszłości, jak na - to w przeszłości. Koniec.
Potem robisz switch z różnicą w dniach i wstawiasz co tam chcesz.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
wiec nie moze byc tak jak ty to napisales, że data na podstawie teraz [ moze wczoraj bylem zmeczony ale rozumowanie bylo dobre]


rety.... A dzis sie wyspales? Nie jestes juz zmeczony? To sluchaj:

ktos wpisal: 2014-11-09
Ty do tego dodajesz dwa dni, czyli masz: 2014-11-11. Potem obie daty porownujesz. Czy wg. ciebie będą one rowne?
Analogicznie bedzie z kazdym dodaniem czy odjeciem. Nigdy daty po twoich operacjach nie będą rowne. Jedyne co bedzie rowne, to $dzisiaj, bo tworzac $dzisiaj nic nie dodajesz wiec zawsze twoj skrypt wyswietlac ci bedzie $dzisiaj

Wiec teraz sie zastanow, czy oby na pewno twoj tok rozumowania jest poprawny
Dlatego powtarzam: masz daty dodawac/odejmowac od daty biezacej. Date co ktos wpisal, masz jedynie brac do porownania

edit: dobra, albo ja mam zaćme, albo ty edytowales pierwszego posta (obstawiam to pierwsze) (IMG:style_emoticons/default/wink.gif) Bo teraz widze, ze jednak bierzesz date bieżącą (IMG:style_emoticons/default/smile.gif)

No ok, czyli jesli poprawiles format dat, to powinno juz ci dzialac. Nie dziala nadal? Pokaz kod po poprawkach
Go to the top of the page
+Quote Post
Pyton_000
post
Post #11





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Dlatego uważam że edycja tematów po odpowiedzi powinna być zakazana (IMG:style_emoticons/default/wink.gif) Bo wychodzą różne kwiatki (IMG:style_emoticons/default/wink.gif)
Ale nospor Ty się nie denerwuj, strzel sobie w stopę a autor dostanie objawienia (IMG:style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ale on nie edytowal, tylko ja slepne na starosc (IMG:style_emoticons/default/smile.gif)
Ale ja sie nie denerwuje. Nie umiem tylko pisac ladnymi słowami, stad mylnie odbierane są moje emocje w wiekszosci wypadkow.
Go to the top of the page
+Quote Post
viamarimar
post
Post #13





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


-pierwszy post nie byl edytowany, co do tego nie dziala,dodalem pickera z dobrym formatem wiec tak jak mowil powyzej Pan przepraszam jesli ten blad jest idiotyczny a moja wiedza nie jest taka jak wasza no ale to chyba odpowiedni dzial

- nie dzialaja mi daty w tyl np wczoraj? itd? cala reszta do przodu pojutrze jutro id jest ok ale czemu tak?
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Untitled Document</title>
  6. <link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
  7. <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  8. <script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
  9. <script>
  10. $(function() {
  11. $("#datepicker").datepicker({ dateFormat: "dd-mm-yy" }).val()
  12. });
  13. </script>
  14.  
  15. </head>
  16.  
  17. <body>
  18. <?php
  19. #echo "<b>PRZYKŁAD</b><br>";
  20. #echo "#Zakładając, że dzis mamy ".date("j-m-Y") ." to ".date("j-m-Y",mktime(0,0,0,date("n"),date("j")-2,date("Y")))." to jest przedwczoraj.<br>";
  21. ?>
  22.  
  23.  
  24.  
  25. <?php
  26. echo "Podaj date w formacie j-m-Y"; ?>
  27. <form action="plik2.php" method="POST">
  28. Wpisz date:<input type="text" name="data" id="datepicker"><br /><br />
  29. <input type="submit" value="Wyślij" name="submit"/>
  30. <input type="submit" value="Reset" name="submit2"/>
  31. </form>
  32. <?
  33. if (isset($_POST['submit'])) {
  34.  
  35.  
  36.  
  37. #date("F j, Y", strtotime("yesterday"));
  38.  
  39. $data=$_POST['data'];
  40. //$data1=strtotime("$data");
  41. //echo $data1;
  42. //echo strtotime ( "10 września 2000" ), "\ n<br><br>" ;
  43. if(!empty($data)){
  44. $dni_tygodnia = array( 'niedziela', 'poniedziałek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota' );
  45. $dzien_tygodnia = date("w",strtotime($data));
  46. $miesiac = date("n",strtotime($data));
  47. $miesiace = array(1 => 'stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca', 'sierpnia', 'września', 'października', 'listopada', 'grudnia');
  48. $dzien = date("j",strtotime($data));
  49. $rok = date("Y",strtotime($data));
  50.  
  51. #date("j-m-Y",mktime(0,0,0,date("n"),date("j")-2,date("Y")))." to jest przedwczoraj.<br>";
  52.  
  53.  
  54. $za_3_dni=date("j-m-Y",mktime(0,0,0,date("n"),date("j")+3,date("Y")));
  55. $pojutrze= date("j-m-Y",mktime(0,0,0,date("n"),date("j")+2,date("Y")));
  56. $jutro= date("j-m-Y",mktime(0,0,0,date("n"),date("j")+1,date("Y")));
  57. $dzisiaj= date("j-m-Y",mktime(0,0,0,date("n"),date("j"),date("Y")));
  58. $wczoraj= date("j-m-Y",mktime(0,0,0,date("n"),date("j")-1,date("Y")));
  59. $dwa_dni_temu= date("j-m-Y",mktime(0,0,0,date("n"),date("j")-2,date("Y")));
  60. $trzy_dni_temu= date("j-m-Y",mktime(0,0,0,date("n"),date("j")-3,date("Y")));
  61. $tydzien_temu= date("j-m-Y",mktime(0,0,0,date("n"),date("j")-7,date("Y")));
  62. $za_tydzien= date("j-m-Y",mktime(0,0,0,date("n"),date("j")+7,date("Y")));
  63. $miesiac_temu= date("j-m-Y",mktime(0,0,0,date("n")-1,date("j"),date("Y")));
  64. $za_miesiac= date("j-m-Y",mktime(0,0,0,date("n")+1,date("j"),date("Y")));
  65. $rok_temu= date("j-m-Y",mktime(0,0,0,date("n"),date("j"),date("Y")-1));
  66. $za_rok= date("j-m-Y",mktime(0,0,0,date("n"),date("j"),date("Y")+1));
  67. $dwa_tyg_temu= date("j-m-Y",mktime(0,0,0,date("n"),date("j")-14,date("Y")));
  68. $za_dwa_tyg= date("j-m-Y",mktime(0,0,0,date("n"),date("j")+14,date("Y")));
  69.  
  70. switch ($data)
  71. {
  72. case $wczoraj:
  73. $kiedy= "wczoraj";
  74. break;
  75. case $dwa_dni_temu:
  76. $kiedy= "przedwczoraj";
  77. break;
  78. case $trzy_dni_temu:
  79. $kiedy= "trzy dni temu";
  80. break;
  81. case $dzisiaj:
  82. $kiedy= "dzisiaj".", ".date("G:i:s",mktime(date("G"),date("i"),date("s")));
  83. break;
  84. case $jutro:
  85. $kiedy= "jutro";
  86. break;
  87. case $pojutrze:
  88. $kiedy= "pojutrze";
  89. break;
  90. case $za_3_dni:
  91. $kiedy= "za 3 dni";
  92. break;
  93. case $tydzien_temu:
  94. $kiedy= "tydzien temu";
  95. break;
  96. case $za_tydzien:
  97. $kiedy= "za tydzień";
  98. break;
  99. case $miesiac_temu:
  100. $kiedy= "miesiąc temu";
  101. break;
  102. case $za_miesiac:
  103. $kiedy= "za miesiąc";
  104. break;
  105. case $rok_temu:
  106. $kiedy= "rok temu";
  107. break;
  108. case $za_rok:
  109. $kiedy= "za rok";
  110. break;
  111. case $dwa_tyg_temu:
  112. $kiedy= "2 tygodnie temu";
  113. break;
  114. case $za_dwa_tyg:
  115. $kiedy= "za 2 tygodnie";
  116. break;
  117. case $mc:
  118. $kiedy= "ubiegły miesiąc";
  119. break;
  120. default:
  121. $kiedy= "nie kojarzę, kiedy to było, ale za to wiem, w jaki dzień wypada";
  122. }
  123.  
  124. echo $kiedy.", ".$dni_tygodnia[ $dzien_tygodnia ].", ".$dzien." ".$miesiace[$miesiac]." ".$rok." roku.";
  125.  
  126.  
  127. }
  128. else{
  129. echo "Podaj date!";
  130. }
  131.  
  132. }
  133.  
  134. ?>
  135. </body>
  136. </html>




Ten post edytował viamarimar 10.11.2014, 19:04:21
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to zobacz jak wyglada wygenerowane przez Ciebie $wczoraj, zobacz jak wyglada wpisana data i bedziesz wiedzial czemu sie nie zgadzaja
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 15.09.2025 - 21:55