Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamiana cyfr miesiąca na nazwy
Forum PHP.pl > Forum > PHP
Tuomi
Witam. Mam drobny problem z nazwami miesięcy. Nie chcę korzystać z funkcji czasowej
  1. echo dateV('l j f Y',strtotime('2009-09-02'));


Oto mój kod:
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta http-equiv=content-type content="text/html; charset=utf-8">
  5. <title>kalendarzyk</title>
  6. <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
  7. <script src="jquery-1.10.2.js"></script>
  8. <link rel="stylesheet" href="jquery-ui.css">
  9. <script src="jquery-ui.js"></script>
  10. <link rel="stylesheet" href="/resources/demos/style.css">
  11. <script>
  12. $(function() {
  13. $( "#datepicker" ).datepicker();
  14. });
  15. </script>
  16. </head>
  17. <body>
  18. <center>
  19. <?php
  20. $get = $_GET['get'];
  21. if(empty($get)){
  22. $data = date('d.m.Y');
  23. echo '<u>Dziś jest <b>'.$data.'</b>.</u><br><br>
  24. <form action="?get=last_day_menstrual" method="post">
  25. Ostatni dzień okresu:<br>
  26. <input type="text" id="datepicker" size="10" name="ldm">
  27. <input type="submit" value="Oblicz">
  28. </form>';
  29. }elseif($get == 'last_day_menstrual'){
  30. $data = date('d.m.Y');
  31. $ldm = $_POST['ldm'];
  32.  
  33. $start = date('Y-m-d', strtotime("$ldm +14 day"));
  34. $end = date('Y-m-d', strtotime("$start +10 day"));
  35.  
  36. $data_start = explode('-',$start);
  37. $data_end = explode('-',$end);
  38. $data_ldm = explode('-',$ldm);
  39.  
  40. $day_start = $data_start[2];
  41. $year_start = $data_start[0];
  42. $day_end = $data_end[2];
  43. $year_end = $data_end[0];
  44. $day_ldm = $data_ldm[2];
  45. $year_ldm = $data_ldm[0];
  46.  
  47. if($data_start[1] == '01' || $data_end[1] == '01' || $data_ldm[1] == '01')
  48. {$month_start = 'stycznia'; $month_end = 'stycznia'; $month_ldm = 'stycznia';}
  49. if($data_start[1] == '02' || $data_end[1] == '02' || $data_ldm[1] == '02')
  50. {$month_start = 'lutego'; $month_end = 'lutego'; $month_ldm = 'lutego';}
  51. if($data_start[1] == '03' || $data_end[1] == '03' || $data_ldm[1] == '03')
  52. {$month_start = 'marca'; $month_end = 'marca'; $month_ldm = 'marca';}
  53. if($data_start[1] == '04' || $data_end[1] == '04' || $data_ldm[1] == '04')
  54. {$month_start = 'kwietnia'; $month_end = 'kwietnia'; $month_ldm = 'kwietnia';}
  55. if($data_start[1] == '05' || $data_end[1] == '05' || $data_ldm[1] == '05')
  56. {$month_start = 'maja'; $month_end = 'maja'; $month_ldm = 'maja';}
  57. if($data_start[1] == '06' || $data_end[1] == '06' || $data_ldm[1] == '06')
  58. {$month_start = 'czerwca'; $month_end = 'czerwca'; $month_ldm = 'czerwca';}
  59. if($data_start[1] == '07' || $data_end[1] == '07' || $data_ldm[1] == '07')
  60. {$month_start = 'lipca'; $month_end = 'lipca'; $month_ldm = 'lipca';}
  61. if($data_start[1] == '08' || $data_end[1] == '08' || $data_ldm[1] == '08')
  62. {$month_start = 'sierpnia'; $month_end = 'sierpnia'; $month_ldm = 'sierpnia';}
  63. if($data_start[1] == '09' || $data_end[1] == '09' || $data_ldm[1] == '09')
  64. {$month_start = 'września'; $month_end = 'września'; $month_ldm = 'września';}
  65. if($data_start[1] == '10' || $data_end[1] == '10' || $data_ldm[1] == '10')
  66. {$month_start = 'października'; $month_end = 'października'; $month_ldm = 'października';}
  67. if($data_start[1] == '11' || $data_end[1] == '11' || $data_ldm[1] == '11')
  68. {$month_start = 'listopada'; $month_end = 'listopada'; $month_ldm = 'listopada';}
  69. if($data_start[1] == '12' || $data_end[1] == '12' || $data_ldm[1] == '12')
  70. {$month_start = 'grudnia'; $month_end = 'grudnia';$month_ldm = 'grudnia';}
  71.  
  72. echo '<u>Dziś jest <b>'.$data.'</b>.</u><br>';
  73. echo '<br><form action="?get=last_day_menstrual" method="post">';
  74. echo 'Ostatni dzień okresu to <b>'.$ldm.'</b><br>';
  75. echo 'Ostatni dzień okresu to <b>'.$day_ldm.' '.$month_ldm.' '.$year_ldm.'</b><br>';
  76. echo '<input type="text" id="datepicker" size="10" value='.$ldm.' name="ldm">';
  77. echo '<input type="submit" value="Oblicz">';
  78. echo '</form>';
  79.  
  80. echo 'Tabletki powinnaś zacząć brać <b>'.$start.'</b> i skończyć <b>'.$end.'</b>.';
  81. echo 'Tabletki powinnaś zacząć brać <b>'.$day_start.' '.$month_start.' '.$year_start.'</b> i skończyć <b>'.$day_end.' '.$month_end.' '.$year_end.'</b>.';
  82. }
  83. ?>
  84. </body>
  85. </html>

Przykład:

Ostatni dzień okresu to 2014-12-09
Ostatni dzień okresu to 09 grudnia 2014


tu jak widać poprawnie przekształca cyfrę miesiąca (12) na nazwę.

Ale po obliczeniu dat (data+14 i data+14+10) wyskakuje:

Tabletki powinnaś zacząć brać 2014-12-23 i skończyć 2015-01-02.
Tabletki powinnaś zacząć brać 23 grudnia 2014 i skończyć 02 grudnia 2015.


Zamiast "stycznia" jest "02 grudnia".

Gdzie jest błąd?

I jeszcze pytanie przy okazji: Jak zrobić by w przypadku gdy dzień jest mniejszy niż 10 wyświetlało tylko jedną cyfrę, tzn np. zamiast 02 było 2?
tzm
Błąd jest w logice.. nie zmieniaj tego za pomocą php i nie wyświetlaj tego echem - nie ingeruje i nie przekształcaj daty bo robisz to w jedną stronę jak mniemam i potem if jest sprawdzany znowu dla wartości nie INT tylko stringa z nazwą miesiąca...

JavaScript poradzi sobie z tym lepiej i ponad to powinieneś mieć zmienne tymczasowe a nie nadpisywać starych które sprawdzasz w locie bo jak je nadpisujesz to potem już jest dupa i if tego nie łapie... pewnie bredzę ale nie znam php.


Drugie pytanie:

  1. function normalizeDay($day){
  2. if($day < 10){
  3. return substr($day, 1);
  4. }
  5. return $day;
  6. }
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.