ビュー内のphpフィールドの2つの日付フィールドを比較しようとしています
これまでのところ、これはとてもうまく機能しています...
Phpフィールドは次のようになります。
$nid = $data->nid;
$node = node_load($nid);
$start_value = $node->field_tria['und'][0]['value'];
$end_value = $node->field_data_de_resoluci_['und'][0]['value'];
$timezone = $node->field_tria['und'][0]['timezone'];
$start_date = new DateObject($start_value, $timezone);
$end_date = new DateObject($end_value, $timezone);
$difference = $start_date->difference($end_date, 'days');
return $difference;
これにより、日差の値が返されますが、常に正になります。望ましい結果は次のようになります。
日差:
例1(負の値):
2日前(または-2)
例2(正の値):
2日
また、最初にすべてのノードをロードすることは、これを行うための最も効率的な方法ではないようです...しかし、それは機能します。
どうもありがとう
これが私の最終的なコードです:
$nid = $data->nid;
$node = node_load($nid);
$timezone = $node->field_tria['und'][0]['timezone'];
$start_value = $node->field_tria['und'][0]['value'];
$day = substr($start_value,8,2);
$month = substr($start_value,5,2);
$year = substr($start_value,0,4);
$date = "$year-$month-$day";
$value1 = new DateObject($date, $timezone);
$end_value = $node->field_data_de_resoluci_['und'][0]['value'];
$day2 = substr($end_value,8,2);
$month2 = substr($end_value,5,2);
$year2 = substr($end_value,0,4);
$date2 = "$year2-$month2-$day2";
$value2 = new DateObject($date2, $timezone);
$difference = $value1->difference($value2, 'days', FALSE);
return $difference+1;
DateObject::difference()
への呼び出しに$absolute
パラメータを追加して、サインを取得できるようにする必要がある場合があります。
$difference = $start_date->difference($end_date, 'days', FALSE);
DateObject :: difference documentation によると、$absolute
パラメータ:
差の絶対値を返すか、符号を保持するかを指定します。デフォルトはTRUEです。
両方のフィールドが同じエンティティ(この場合は同じノード)にある場合、ビューPHPで 計算フィールド モジュールを使用することをお勧めします。
計算フィールドのコードで関数をすばやく起動する機能により、Views PHPを使用するよりも(バージョン管理システムを使用して)管理が容易になり、サイトの攻撃面が減少します(直接入力できるようになります) PHP to Drupal UIで、PHP DBでの生活は決して良いことではありません)
計算フィールドを使用する-アプローチは、現在使用されているものとほとんど同じです-@dinopmiによる他の回答のアドバイスを含みます。