Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przetwarzanie daty z selecta
Forum PHP.pl > Forum > Przedszkole
viamarimar
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.  
nospor
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 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.
Pyton_000
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ś.
tzm
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ć?
Pyton_000
Kół u mnie w piwnicy już sporo leży smile.gif Teraz za kwadraty się zabrałem haha.gif
viamarimar
Przepraszam chodzilo o switcha oczywiscie i o to czemu sie zle wykonuje

mozesz mi uzmyslowic ten blad logiczny bo nie bardzo rozumiem??
nospor
No to czemu się źle wykonuje już ci przecież napisałem.
viamarimar
"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]
Pyton_000
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.
nospor
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) wink.gif Bo teraz widze, ze jednak bierzesz date bieżącą smile.gif

No ok, czyli jesli poprawiles format dat, to powinno juz ci dzialac. Nie dziala nadal? Pokaz kod po poprawkach
Pyton_000
Dlatego uważam że edycja tematów po odpowiedzi powinna być zakazana wink.gif Bo wychodzą różne kwiatki wink.gif
Ale nospor Ty się nie denerwuj, strzel sobie w stopę a autor dostanie objawienia haha.gif
nospor
Ale on nie edytowal, tylko ja slepne na starosc smile.gif
Ale ja sie nie denerwuje. Nie umiem tylko pisac ladnymi słowami, stad mylnie odbierane są moje emocje w wiekszosci wypadkow.
viamarimar
-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>


nospor
No to zobacz jak wyglada wygenerowane przez Ciebie $wczoraj, zobacz jak wyglada wpisana data i bedziesz wiedzial czemu sie nie zgadzaja
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.