在计算字段drupal 7中计算条件日期之间的差异

时间:2018-01-05 13:53:32

标签: php drupal-7 datediff drupal-computed-field

我有一个计算字段(字段:length_of_stay),用于计算开始日期(字段:date_of_admission)与内容类型“患者”的当前日期之间的差异。
字段设置中的我的计算代码(PHP)是:

`$field_date_of_admission = array_pop(field_get_items($entity_type, $entity, 
'field_date_of_admission'));
$start_date = new DateObject($field_date_of_admission['value'], '');
$current_date = new DateObject('now', '', 'm/d/Y');
$length_of_stay = $start_date->difference($current_date, 'days');
$entity_field[0]['value'] =  $length_of_stay;
}`

显示代码为:

`$display_output = $entity_field_item['value'];`  

它虽然从0日期开始有效。

我的问题是,当我想要停用病人时,计算字段会继续计算差异,这对我的应用程序来说似乎是错误的。 (内容类型患者也有字段:活动且可接受的值是或否)。

是否可以使用if语句或其他内容?我其实不懂PHP。 有人可以在这里提供一些指导吗?

2 个答案:

答案 0 :(得分:0)

您需要使用以下代码替换代码,并且需要使用field_active字段机器名称进行仔细检查。

$field_date_of_admission = array_pop(field_get_items($entity_type, $entity, 'field_date_of_admission'));
$active = array_pop(field_get_items($entity_type, $entity, 'field_active'));
if ($active) {
    $start_date = new DateObject($field_date_of_admission['value'], '');
    $current_date = new DateObject('now', '', 'm/d/Y');
    $length_of_stay = $start_date->difference($current_date, 'days');
    $entity_field[0]['value'] = $length_of_stay;
} else {
    $entity_field[0]['value'] = 0;
}

希望这会帮助你。

答案 1 :(得分:0)

一位朋友给了我这个代码并为我工作,所以这里适合任何可能需要类似东西的人。它计算活动或非活动患者的住院时间。 内容类型:“患者”。字段:field_length_of_stay(计算字段),field_date_of_admission(日期),field_date_of_discharge(日期),field_active(布尔值1 /是,0 /否)。

$field_date_of_admission = array_pop(field_get_items($entity_type, $entity, 'field_date_of_admission'));
$field_active = field_get_items($entity_type, $entity, 'field_active');
$field_date_of_discharge = array_pop(field_get_items($entity_type, $entity, 'field_date_of_discharge'));

 if ($field_active[0]['value'] == '1') {
  $ad_date = new DateObject($field_date_of_admission['value'], '');
  $current_date = new DateObject('now', '', 'm/d/Y');
  $los = $ad_date->difference($current_date, 'days');
  $entity_field[0]['value'] =  $los;
} else {
  $ad_date = new DateObject($field_date_of_admission['value'], '');
  $dis_date = new DateObject($field_date_of_discharge['value'], '');
  $los = $ad_date->difference($dis_date, 'days');
  $entity_field[0]['value'] =  $los;
}