103

我正在尝试从我的 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

所以我不明白为什么原来的日期对象很好,但是我试图创建一个额外的日期对象并通过减去一天来修改它,似乎我不能这样做。输出总是空白。

4

10 回答 10

162

你可以试试:

print('Next Date ' . date('Y-m-d', strtotime('-1 day', strtotime($date_raw))));
于 2011-10-04T16:51:47.057 回答
66
 date('Y-m-d',(strtotime ( '-1 day' , strtotime ( $date) ) ));
于 2011-10-04T16:56:41.370 回答
49
$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 显着减少了操作日期时的头痛。

于 2017-05-18T23:09:17.857 回答
26

面向对象的版本

$dateObject = new DateTime( $date_raw );
print('Next Date ' . $dateObject->sub( new DateInterval('P1D') )->format('Y-m-d');
于 2013-08-06T13:57:01.563 回答
26

单线选项是:

echo date_create('2011-04-24')->modify('-1 days')->format('Y-m-d');

在在线 PHP 编辑器上运行它。


mktime替代品

如果您更喜欢避免使用字符串方法,或者进行计算,甚至创建额外的变量,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

在线 PHP 编辑器

于 2016-03-22T12:37:00.913 回答
14

不知道为什么您当前的代码不起作用,但如果您不特别需要日期对象,这将起作用:

$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);
于 2011-10-04T16:52:06.133 回答
8

Answear 取自 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"));
于 2019-03-22T08:57:00.417 回答
8

您可以添加参数天strtotime()date()周或月。date("Y-m-d", strtotime("-1 day"));以日为周date("Y-m-d", strtotime("-1 week"));、以月为单位的示例date("Y-m-d", strtotime("-1 months"));

于 2019-07-25T17:17:03.920 回答
3

怎么样:首先将其转换为 unix 时间戳,减去 60*60*24(以秒为单位的确切日期),然后从中获取日期。

$newDate = strtotime($date_raw) - 60*60*24;
echo date('Y-m-d',$newDate);

注意:正如 apokryfos 所指出的,从技术上讲,这会被夏令时更改所抛弃,其中一天有 25 或 23 小时

于 2015-06-11T04:58:42.877 回答
-4

如何在asp.net c#中将1年添加到日期然后从中减去1天

Convert.ToDateTime(txtDate.Value.Trim()).AddYears(1).AddDays(-1);
于 2018-12-15T07:12:20.940 回答