web-dev-qa-db-ja.com

ビューPHPフィールド-2つの日付フィールドの比較

ビュー内の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;
1
Carlos Solé

DateObject::difference()への呼び出しに$absoluteパラメータを追加して、サインを取得できるようにする必要がある場合があります。

$difference = $start_date->difference($end_date, 'days', FALSE);

DateObject :: difference documentation によると、$absoluteパラメータ:

差の絶対値を返すか、符号を保持するかを指定します。デフォルトはTRUEです。

0
dinopmi

両方のフィールドが同じエンティティ(この場合は同じノード)にある場合、ビューPHPで 計算フィールド モジュールを使用することをお勧めします。

計算フィールドのコードで関数をすばやく起動する機能により、Views PHPを使用するよりも(バージョン管理システムを使用して)管理が容易になり、サイトの攻撃面が減少します(直接入力できるようになります) PHP to Drupal UIで、PHP DBでの生活は決して良いことではありません)

計算フィールドを使用する-アプローチは、現在使用されているものとほとんど同じです-@dinopmiによる他の回答のアドバイスを含みます。

0
HomoTechsual