web-dev-qa-db-ja.com

2つのカスタムフィールドからの日付計算

WPでカスタムフィールドとして保存された2つの日付間の時差を計算する方法を見つけるのに苦労しています。実際には2つの異なるプラグインを使用しています。

a) 簡単なコンテンツタイプ

b) 詳細投稿リスト

最初に、開始日(ecpt_data-consegna)と終了日(ecpt_data-dismissione)を含む一連のカスタムフィールドを作成しました。これらの日付の時差を表示する方法を見つけます。XX年、XXとして表示します。月、XX日 - Advanced Post Listプラグインを通じて生成されたテーブルのセル内。終了日が欠落している場合は、開始日と現在の日付(現在)の差を計算する必要があります。

両方のプラグインの開発者と多くのことを話し合った後、私たちは停止しました。現在、次のように日付計算を処理するためのカスタムPHP関数を開発しました。

function calculateDiff() {
$start_date = new DateTime(get_post_meta( get_the_ID(), 'ecpt_data-consegna', true ));
$since_start = $start_date->diff(new DateTime(get_post_meta( get_the_ID(), 'ecpt_data-dismissione', true )));

if($since_start->days == 0) {
        $since_start = $start_date->diff(new DateTime());
}

return $since_start->y . ' years, ' . $since_start->m . ' months, ' . $since_start->d . ' days'; }

しかし、このAPLのショートコードをAPLで生成されたセルの1つに入れると、次のようになります。

<td>[php_function name="calculateDiff"]</td>

その結果、壊れたWebページが作成され、テーブル自体が生成されます。そして、代わりにこのコードを使おうとすると:

<td><?php echo calculateDiff();?></td>

結果は空白のセルです。

関数を直接(APLの外側で)呼び出すことも試みましたが、結果は常に空白になります。それで、どこかに問題があるはずです….

どんな助けでも大いに喜ばれるでしょう!

1
Diego Meozzi

これがどれほど役立つかはわかりませんが、日付/時刻の比較を行うときは、常に最初にUNIXのタイムスタンプに変換する必要があります(日付/時刻を数字に変換します。次の数よりも大きい/等しい/等しい)、差を並べ替えた後、date()で変換し直します。

簡単な例(あなたのコードではなく、数年前に私がクライアントのために私がした簡単な例)はこれをすることでした:

$today = date('d-m-Y');                       // today's date
$today = strtotime($today);                    // UNIX conversions  

私は最初にそれらをUNIXに変換せずに日付の比較をする運がなかった。

1
Shelly