如何从今天的日期获得下个月的日期并将其插入我的数据库?

Sal*_*leh 34 php mysql date

我的数据库中有两列:start_dateend_date两种DATE类型.我的代码更新日期如下:

$today_date = date("Y-m-d");
$end_date = date("Y-m-d"); // date +1 month ??

$sql1 = "UPDATE `users` SET `start_date` = '".$today_date."', `end_date` = '".$end_date."'  WHERE `users`.`id` ='".$id."' LIMIT 1 ;";
Run Code Online (Sandbox Code Playgroud)

$end_date等于$start_date+一个月的最佳方法是什么?例如,2000- 10 -01将成为2000 - 11 -01.

Gaz*_*ler 83

你可以使用PHP的strtotime()函数:

// One month from today
$date = date('Y-m-d', strtotime('+1 month'));

// One month from a specific date
$date = date('Y-m-d', strtotime('+1 month', strtotime('2015-01-01')));
Run Code Online (Sandbox Code Playgroud)

请注意,+1 month并不总是直观地计算.它似乎总是添加当月存在的天数.

Current Date  | +1 month
-----------------------------------------------------
2015-01-01    | 2015-02-01   (+31 days)
2015-01-15    | 2015-02-15   (+31 days)
2015-01-30    | 2015-03-02   (+31 days, skips Feb)
2015-01-31    | 2015-03-03   (+31 days, skips Feb)
2015-02-15    | 2015-03-15   (+28 days)
2015-03-31    | 2015-05-01   (+31 days, skips April)
2015-12-31    | 2016-01-31   (+31 days)
Run Code Online (Sandbox Code Playgroud)

您可以使用的其他一些日期/时间间隔:

$date = date('Y-m-d'); // Initial date string to use in calculation

$date = date('Y-m-d', strtotime('+1 day', strtotime($date)));
$date = date('Y-m-d', strtotime('+1 week', strtotime($date)));
$date = date('Y-m-d', strtotime('+2 week', strtotime($date)));
$date = date('Y-m-d', strtotime('+1 month', strtotime($date)));
$date = date('Y-m-d', strtotime('+30 days', strtotime($date)));
Run Code Online (Sandbox Code Playgroud)

  • @JamWaffles和@SzamDev,当前日期是1月31日时,你应该检查你对结果是否满意.带月份的日期算术有时会产生意外结果. (7认同)
  • 如果日期为2014年1月30日或2014年1月31日,则无效 (4认同)
  • 那是正确的。玩一玩,它还接受诸如“下周四”、“上周二”和“+1 周 3 天 2 小时 4 秒”之类的内容 (3认同)

Pat*_*ins 20

接受的答案只有在您需要31天之后才有效.这意味着如果您使用的日期为"2013-05-31",那么您希望不会在6月份,这不是我想要的.

如果你想下个月,我建议你使用当前的年份和月份,但继续使用第一个月.

$date = date("Y-m-01");
$newdate = strtotime ( '+1 month' , strtotime ( $date ) ) ;
Run Code Online (Sandbox Code Playgroud)

这样,您就可以获得下个月的月份和年份,而不会跳过一个月.


Ant*_*n S 18

您实际上并不需要PHP函数来实现此目的.您已经可以直接在SQL中进行简单的日期操作,例如:

$sql1 = "
    UPDATE `users` SET 
    `start_date` = CURDATE(), 
    `end_date` = DATE_ADD(CURDATE(), INTERVAL 1 MONTH)  
    WHERE `users`.`id` = '" . $id . "';
";
Run Code Online (Sandbox Code Playgroud)

请参阅http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_addtime


小智 15

如果您希望下个月有特定日期,可以执行以下操作:

// Calculate the timestamp
$expire = strtotime('first day of +1 month');

// Format the timestamp as a string
echo date('m/d/Y', $expire);
Run Code Online (Sandbox Code Playgroud)

请注意,这实际上可以更加可靠地工作,+1 month令人困惑.例如...

Current Day   | first day of +1 month     | +1 month
---------------------------------------------------------------------------
2015-01-01    | 2015-02-01                | 2015-02-01
2015-01-30    | 2015-02-01                | 2015-03-02  (skips Feb)
2015-01-31    | 2015-02-01                | 2015-03-03  (skips Feb)
2015-03-31    | 2015-04-01                | 2015-05-01  (skips April)
2015-12-31    | 2016-01-01                | 2016-01-31
Run Code Online (Sandbox Code Playgroud)


Lau*_*ovs 13

要小心,因为有时strtotime("+1 months")可以跳过月份数字.

例:

$today = date("Y-m-d"); // 2012-01-30
$next_month = date("Y-m-d", strtotime("$today +1 month"));
Run Code Online (Sandbox Code Playgroud)

如果今天是1月,下个月应该是2月28或29天,但PHP将在3月返回,而不是2月.