【发布时间】:2010-04-25 16:20:02
【问题描述】:
嗯,以下返回 5 天前的日期:
$days_ago = date('Y-m-d', mktime(0, 0, 0, date("m") , date("d") - 5, date("Y")));
但是,我如何找到从任何日期 5 天前的内容,而不仅仅是今天?
例如:2008-12-02 之前的 5 天是什么时候?
【问题讨论】:
标签: php
嗯,以下返回 5 天前的日期:
$days_ago = date('Y-m-d', mktime(0, 0, 0, date("m") , date("d") - 5, date("Y")));
但是,我如何找到从任何日期 5 天前的内容,而不仅仅是今天?
例如:2008-12-02 之前的 5 天是什么时候?
【问题讨论】:
标签: php
我认为一种可读的方式是:
$days_ago = date('Y-m-d', strtotime('-5 days', strtotime('2008-12-02')));
【讨论】:
time(),$n5_daysAgo = date('Y-m-d', strtotime('-5 days')); 足以让代码更简洁
在 php 中找出从今天起 5 天前的日期
$date = strtotime(date("Y-m-d", strtotime("-5 day")));
在php中找出从今天起n天前的日期
$date = strtotime(date("Y-m-d", strtotime("-n day")));
【讨论】:
从特定日期起 5 天前:
$date = new DateTime('2008-12-02');
$date->sub(new DateInterval('P5D'));
echo $date->format('Y-m-d') . "\n";
【讨论】:
define('SECONDS_PER_DAY', 86400);
$days_ago = date('Y-m-d', time() - 5 * SECONDS_PER_DAY);
除此之外,您可以在任何日期使用strtotime:
$days_ago = date('Y-m-d', strtotime('January 18, 2034') - 5 * SECONDS_PER_DAY);
或者,如你所用,mktime:
$days_ago = date('Y-m-d', mktime(0, 0, 0, 12, 2, 2008) - 5 * SECONDS_PER_DAY);
嗯,你明白了。关键是要从时间戳中删除足够多的秒数。
【讨论】:
试试这个
$date = date("Y-m-d", strtotime("-5 day"));
【讨论】:
只需这样做......希望它有效
$fifteendaysago = date_create('15 days ago');
echo date_format($fifteendaysago, 'Y-m-d');
【讨论】:
如果您想要一种知道算法的方法,或者上一个答案中提到的函数不可用:将日期转换为儒略日数(这是一种从公元前 4713 年 1 月 1 日开始计算天数的方法) ,然后减去五,然后转换回日历日期(年、月、日)。两种转换的算法来源是http://www.hermetic.ch/cal_stud/jdn.htm或http://en.wikipedia.org/wiki/Julian_day的第9节
【讨论】:
使用内置的 date_sub 和 date_add 函数来计算日期。 (见http://php.net/manual/en/datetime.sub.php)
与 Sazzad 的回答类似,但采用 PHP 程序风格,
$date = date_create('2008-12-02');
date_sub($date, date_interval_create_from_date_string('5 days'));
echo date_format($date, 'Y-m-d'); //outputs 2008-11-27
【讨论】:
日期操作的通用算法将日期与儒略日数相互转换。以下是此类算法描述的链接、当前已知最佳算法的描述以及每种算法的数学证明: http://web.archive.org/web/20140910060704/http://mysite.verizon.net/aesir_research/date/date0.htm
【讨论】:
找到相同的简单方法是
$date = date("Y-m-d", strtotime('-5 days', strtotime('input_date')));
【讨论】: