私はDrupal CMSから出てくる日付オブジェクトを取得し、1日減算して両方の日付を出力しようとしています。ここに私が持っているものがあります
$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
だから私は元の日付オブジェクトがうまく出ている理由を理解していませんが、追加の日付オブジェクトを作成し、1日差し引くことでそれを変更しようとしていますが、それはできないようです。出力は常に空白になります。
あなたが試すことができます:
print('Next Date ' . date('Y-m-d', strtotime('-1 day', strtotime($date_raw))));
date('Y-m-d',(strtotime ( '-1 day' , strtotime ( $date) ) ));
$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を使用すると、日付を操作する際の頭痛の種が大幅に減少しました。
オブジェクト指向バージョン
$dateObject = new DateTime( $date_raw );
print('Next Date ' . $dateObject->sub( new DateInterval('P1D') )->format('Y-m-d');
one-linerオプションは次のとおりです。
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
現在のコードが機能しない理由はわかりませんが、特に日付オブジェクトが必要ない場合は、これが機能します。
$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);
Phpマニュアルstrtotime関数のコメントから取られたAnswear:
echo date( "Y-m-d", strtotime( "2009-01-31 -1 day"));
または
$date = "2009-01-31";
echo date( "Y-m-d", strtotime( $date . "-1 day"));
これはどうですか:まずUnixタイムスタンプに変換し、60 * 60 * 24(正確には1日を秒単位で)減算してから、そこから日付を取得します。
$newDate = strtotime($date_raw) - 60*60*24;
echo date('Y-m-d',$newDate);
注:apokryfosが指摘したように、これは25時間または23時間の日がある夏時間の変更により技術的に無効になります。
そのような単純な:
date("Y-m-d", strtotime("-1 day"));
date("Y-m-d", strtotime("-1 months"))