PHPのDateTimeクラスには、DateTimeオブジェクトからタイムスパンを加算または減算するadd()およびsub()の2つのメソッドがあります。これは私にはとてもよく似ていますが、.NETでも同じことができます。しかし、一度試してみると、それは非常に奇妙なことをしました。私はPHPで、それらのメソッドはオブジェクト自体を変更することがわかった。これは文書化されておらず、戻り値の型はそれ以外の場合を示します。さて、いくつかのシナリオでは、1つではなく3行のコードと、追加のローカル変数が必要です。しかし、PHP5のリファレンスモデルによる複製も機能します。オブジェクトをコピーするだけでは不十分です。元のインスタンスを誤って変更しないように、オブジェクトを明示的に複製する必要があります。そこでここではC#のコードは次のとおりです。.NET開発者のPHP DateTime
DateTime today = DateTime.Today;
...
if (date < today.Add(TimeSpan.FromDays(7)) ...
ここではPHPと同等です:
$today = new DateTime('today');
...
$then = clone $today;
$then->add(new DateInterval('P7D'));
if ($date < $then) ...
(私は、メソッドの実行時にすべての計算のために同じ時間を持つように、今日のコピーを保存し、私はそれを見てきました。多くの場合、秒単位またはそれ以上の時間単位が変更されます。)
これはPHPですか?より良い解決策がない場合は、そのためのラッパークラスを作成する必要があります!または、私はちょうどよいol 'time()関数を使い、データベースから取得するISO日付の解析を簡単にするためにDateTimeを使用します。
$today = time() % 86400;
...
if ($date < $today + 7 * 86400) ...
これらの例ではタイムゾーンは考慮されていません。
更新:私は、このような日付の解析にstrtotime()関数を使用できることを知りました。それで、PHPのDateTimeクラスの使用はどうしたらいいですか?使用するのがとても複雑なのですか?
更新^ 2:今日の私の$ =がゴミであることに気付きました。さて、「今日」の代わりに正しい方法を想像してみてください。
「これは記載されていません」.... DateTime :: add - DateTimeオブジェクトに日、月、年、時、分、秒を追加します。 –
はい、時間を追加して返します新しい価値 - これは私の理解です。それを明確にするものはほかにありません。インスタンスを変更することは全く実用的ではありません。特にそれを避けるような努力が必要な場合。 – ygoe
これは、メソッドチェーンのDateTimeオブジェクトを返します。それはそれがオリジナルのオブジェクトであることを意味します。しかし、時にはあまり実用的ではない –