2

ユーザーが選択した月の次の日付に end_trial 日付を設定するようにストライプを取得しようとしています。つまり、今日が 16 日で、ユーザーが 15 日を選択した場合、翌月の 15 日の UNIX タイムスタンプが必要です。ただし、今日が 14 日だった場合、明日のタイムスタンプが必要です。

この SO question Find the date for next 15th using php で見つかった解決策を試しました。

その質問で提案されたコードを実行し、15を31に置き換えたとき

$nextnth = mktime(0, 0, 0, date('n') + (date('j') >= 31), 31);

echo date('Y-m-d', $nextnth);

結果は 2013-03-03

私もこれを試しました 18日の次の日付を取得します

2番目のものは、2013-1-31を実行したときに実際には2013-03-31を提供します。

どちらも予想外の結果でした。問題は2月?どんなガイダンスでも大歓迎です。

4

2 に答える 2

3

ここにそれを行う方法があります。

function nextDate($userDay){      

  $today = date('d'); // today

  $target = date('Y-m-'.$userDay);  // target day

  if($today <= $userDay){

   $return = strtotime($target);

  }
  else{

   $thisMonth = date('m') + 1;
   $thisYear = date('Y');

   if($userDay >= 28 && $thisMonth == 2){
       $userDay = 28;
   }


   while(!checkdate($thisMonth,$userDay,$thisYear)){

     $thisMonth++;

     if($thisMonth == 13){

       $thisMonth = 1;
       $thisYear++;

     }

   }      

   $return = strtotime($thisYear.'-'.$thisMonth.'-'.$userDay);

  }

  return $return; 

}

// usage
echo date('Y-m-d',nextDate(29));

ユーザーの選択を取得し、今日比較します。

  • 今日がユーザーの選択以下の場合、今月のタイムスタンプを返します。

  • 今日がユーザーの選択よりも大きい場合は、日付をループして、1 か月 (または $thisMonth が 13 に達した場合は 1 年) を追加します。この日付が再び存在するようになると、答えが得られます。

PHP の checkdate 関数strtotimeおよびdateを使用して日付を確認します。

于 2013-02-01T01:17:54.120 に答える
0

私は本当に質問を完全に理解していません。たとえば、次の 30 日間の日付を簡単に決定できます。

$next_ts = time() + 30 * 86400; // add 30 days to current timestamp
$next = date('Y-m-d', $next_ts);   // format string as Y-m-d 
echo $next;

それが必要でない場合は、問題を説明してください。

于 2013-01-31T23:01:44.983 に答える