我正在尝试从Drupal CMS中取出一个日期对象,减去一天并打印出两个日期。这就是我所拥有的
$date_raw = $messagenode->field_message_date[0]['value'];
print($date_raw);
//this gives me the following string: 2011-04-24T00:00:00
$date_object = date_create($date_raw);
$next_date_object = date_modify($date_object,'-1 day');
print('First Date ' . date_format($date_object,'Y-m-d'));
//this gives me the correctly formatted string '2011-04-24'
print('Next Date ' . date_format($next_date_object,'Y-m-d'));
//this gives me nothing. The output here is always blank
所以我不明白为什么原始日期对象出来很好,但后来我试图创建一个额外的日期对象并通过减去一天来修改它,似乎我不能那样做。输出总是空白。
答案 0 :(得分:120)
您可以尝试:
print('Next Date ' . date('Y-m-d', strtotime('-1 day', strtotime($date_raw))));
答案 1 :(得分:56)
date('Y-m-d',(strtotime ( '-1 day' , strtotime ( $date) ) ));
答案 2 :(得分:19)
面向对象的版本
$dateObject = new DateTime( $date_raw );
print('Next Date ' . $dateObject->sub( new DateInterval('P1D') )->format('Y-m-d');
答案 3 :(得分:18)
$date = new DateTime("2017-05-18"); // For today/now, don't pass an arg.
$date->modify("-1 day");
echo $date->format("Y-m-d H:i:s");
使用DateTime可以显着减少操作日期时忍受的头痛量。
答案 4 :(得分:12)
单行选项是:
echo date_create('2011-04-24')->modify('-1 days')->format('Y-m-d');
在Online PHP Editor上运行它。
<小时/>
如果您希望避免使用字符串方法,或进行计算,甚至创建其他变量,mktime将通过以下方式支持减法和负值:
// Today's date
echo date('Y-m-d'); // 2016-03-22
// Yesterday's date
echo date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-1, date("Y"))); // 2016-03-21
// 42 days ago
echo date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-42, date("Y"))); // 2016-02-09
//Using a previous date object
$date_object = new DateTime('2011-04-24');
echo date('Y-m-d',
mktime(0, 0, 0,
$date_object->format("m"),
$date_object->format("d")-1,
$date_object->format("Y")
)
); // 2011-04-23
答案 5 :(得分:11)
不确定为什么你当前的代码不起作用,但是如果你不特别需要一个日期对象,那么这将有效:
$first_date = strtotime($date_raw);
$second_date = strtotime('-1 day', $first_date);
print 'First Date ' . date('Y-m-d', $first_date);
print 'Next Date ' . date('Y-m-d', $second_date);
答案 6 :(得分:3)
这个怎么样:首先将它转换为unix时间戳,减去60 * 60 * 24(恰好是一天的秒数),然后从中获取日期。
$newDate = strtotime($date_raw) - 60*60*24;
echo date('Y-m-d',$newDate);
注意:正如apokryfos所指出的那样,从技术上来说,夏令时的变化会导致这种情况发生变化,那时会有25或23小时的一天
答案 7 :(得分:0)
Php手册strtotime函数注释中的答案:
echo date( "Y-m-d", strtotime( "2009-01-31 -1 day"));
或
$date = "2009-01-31";
echo date( "Y-m-d", strtotime( $date . "-1 day"));
答案 8 :(得分:0)
像这样的简单
date("Y-m-d", strtotime("-1 day"));
date("Y-m-d", strtotime("-1 months"))
答案 9 :(得分:-1)
如何在asp.net c#中将日期添加1年然后从中减去1天
Convert.ToDateTime(txtDate.Value.Trim()).AddYears(1).AddDays(-1);