【发布时间】:2014-01-03 10:43:55
【问题描述】:
我有一个带有startBefore 日期字段('Y-m-d') 格式的数据库表。还有 3 个其他 int 字段代表年、月和日。我想做的是将这三个字段填充为'Y-m-d' 格式的新startAfter 日期。
例如,我将 '2001-11-14' 作为 startBefore 日期,我想减去 3 年 7 个月 1 天得到 startAfter 日期。
有什么想法可以做到这一点吗?
谢谢!
【问题讨论】:
我有一个带有startBefore 日期字段('Y-m-d') 格式的数据库表。还有 3 个其他 int 字段代表年、月和日。我想做的是将这三个字段填充为'Y-m-d' 格式的新startAfter 日期。
例如,我将 '2001-11-14' 作为 startBefore 日期,我想减去 3 年 7 个月 1 天得到 startAfter 日期。
有什么想法可以做到这一点吗?
谢谢!
【问题讨论】:
使用strtotime('date -years -months -days')
<?php
$time = strtotime('2001-11-14 -3 years -7 months -5 days');
echo $date = date("Y-m-d", $time);
【讨论】:
DateTime来了:
$start_date = '2013-03-06';
$date = DateTime::createFromFormat('Y-m-d',$start_date);
$date->modify('+1 month');
echo $date->format('Y-m-d');//2013-04-06
$date->modify('+4 year');
echo $date->format('Y-m-d');//2017-04-06
$date->modify('+6 day');
echo $date->format('Y-m-d');//2017-04-12
$date->modify('+24 hours');
echo $date->format('Y-m-d');//2017-04-13
$date->modify('-7 years');
echo $date->format('Y-m-d'); //2010-04-13
$date->modify('-18 months');
echo $date->format('Y-m-d'); //2008-10-13
以此类推。
【讨论】:
$start_date = date('Y-m-d');
你可以试试
strtotime php 中的函数非常简单
<?php
echo date("jS F, Y", strtotime("11.12.10"));
// outputs 10th December, 2011
echo date("jS F, Y", strtotime("11/12/10"));
// outputs 12th November, 2010
echo date("jS F, Y", strtotime("11-12-10"));
// outputs 11th December, 2010
?>
【讨论】:
一种方法是使 startBefore 日期成为时间戳,而不是使用数字并重新获得 startAfter 日期,另一种方法是尝试直接从日期中减去天、月和年。
【讨论】: