我有一個奇怪 php 問題想請教

本帖最後由 別問我是誰 於 2017-6-30 01:14 編輯

以下程式用了好耐都好正常 但呢兩日開始 出唔到 2017 - 02

會顯示2個 → 2017 - 03 月

下圖 Highlight 果度 應該係2月

之前一切正常的 係呢兩日開始出唔到2月 變為3月


我的程式碼如下
  1. <html>
  2. <head>
  3. <META HTTP-EQUIV="content-type" CONTENT="text/html; charset=big5">
  4. <title>記錄</title>

  5. <style type="text/css">
  6. a                { font-family: Verdana,Tahoma, 新細明體; text-decoration: none; color: blue; font-size: 13px; }
  7. a:hover                { font-family: Verdana,Tahoma, 新細明體; text-decoration: none; color:#8199D6; font-size: 13px; }
  8. body                { font-family: Verdana,Tahoma, 新細明體; font-size: 13px; background-color:#FFFFFF; }
  9. input                { font-size: 13px; background: #E4EBF7;}
  10. </style>
  11. </head>
  12. <body>

  13. <?php

  14.         $date2 = "2016-03-23";
  15.         $date1 = date("Y-m-d");
  16.         $order_month_num = getMonthNum( $date1 , $date2 );

  17.         function getMonthNum( $date1, $date2, $tags='-' ){
  18.                 $date1 = explode($tags,$date1);
  19.                 $date2 = explode($tags,$date2);
  20.                 return abs($date1[0] - $date2[0]) * 12 + abs($date1[1] - $date2[1]);
  21.         }

  22. ECHO "<select onchange="location.href=this.options[this.selectedIndex].value">\n";
  23. ECHO "<option value="test.php?">選擇</option>\n";

  24. ECHO "<option value="test.php?order_month=0"";

  25.         if ($order_month == '0') {
  26.                 ECHO " selected="selected"";
  27.         }

  28. ECHO ">";

  29. ECHO date("Y - m");
  30. ECHO " 本月</option>\n";

  31.         for ($i = 1; $i <= $order_month_num; $i++) {

  32. ECHO "<option value="test.php?order_month=$i"";

  33.         if ($order_month == $i) {
  34.                 ECHO " selected="selected"";
  35.         }

  36. ECHO ">";

  37. ECHO date("Y - m", strtotime("-$i month"));

  38. ECHO " 月</option>\n";

  39.         }

  40. ECHO "</select>\n";

  41. ?>
  42. </body>
  43. </html>
複製代碼
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

以下程式用了好耐都好正常 但呢兩日開始 出唔到 2017 - 02 月

會顯示2個 → 2017 - 03 月 情況如下 ...
別問我是誰 發表於 2017-6-30 00:58

其實你想做乜?

TOP

本帖最後由 別問我是誰 於 2017-6-30 01:13 編輯
其實你想做乜?
7h1r733n 發表於 2017-6-30 01:06

下圖 Highlight 果度 應該係2月

之前一切正常的 係呢兩日開始出唔到2月 變為3月

TOP

下圖 Highlight 果度 應該係2月

之前一切正常的 係呢兩日開始出唔到2月 變為3月

...
別問我是誰 發表於 2017-6-30 01:11


You should use DatePeriod in this case...
http://php.net/manual/en/class.dateperiod.php

TOP

You should use DatePeriod in this case...
7h1r733n 發表於 2017-6-30 01:27

THX 

TOP

係唔係因為php -1 month係return same day of that month? 唔係個個月都有30/31 日就會出事.

TOP

係唔係因為php -1 month係return same day of that month? 唔係個個月都有30/31 日就會出事. ...
jj2a3 發表於 2017-6-30 11:06

奇怪在 早幾日都正常 係呢兩日先出現問題 

TOP

本帖最後由 ~虎~ 於 2017-6-30 12:56 編輯

做 Programmer 最緊要識 Debug
既然個 Bug 同今日日子有關
問題一定出係同今日日期有關既 Function
諗下 Marginal Case 就會明

同埋上面師兄都提過 既然有現成 Library
就唔好 Reinvent the wheel

TOP

點解唔直接 $month = date("m",strtotime($mydate)); 去replace

TOP

係唔係因為php -1 month係return same day of that month? 唔係個個月都有30/31 日就會出事. ...
jj2a3 發表於 2017-6-30 11:06


其實呢個係有名嘅"2月"問題, 另外如果只攞年月, 應該係用每月1號黎計

TOP