Рассчитать разницу между датами с условным в вычисляемом поле Drupal 7

У меня есть вычисляемое поле (field: length_of_stay) для расчета разницы между начальной датой (field: 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 даты.

Моя проблема в том, что когда я хочу деактивировать пациента, вычисляемое поле продолжает вычислять разницу, которая кажется неправильной для целей моего приложения. (Тип содержимого Patient также имеет поле: active с допустимыми значениями Yes или No).

Можно ли использовать оператор if или что-то еще? Я не знаю PHP на самом деле.
Может ли кто-нибудь дать некоторые указания здесь?

1

Решение

Вам необходимо заменить код следующим кодом и дважды проверить 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;
}

Надеюсь, это поможет вам.

0

Другие решения

Друг дал мне этот код и работает для меня, так что здесь он для тех, кому может понадобиться что-то подобное. Он рассчитывает продолжительность пребывания как для активных, так и для неактивных пациентов.
Тип контента: «Пациент». Поля: field_length_of_stay (вычисляемое поле), field_date_of_admission (date), field_date_of_discharge (date), field_active (Boolean 1 / Yes, 0 / No).

$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;
}
0

По вопросам рекламы [email protected]