2010-01-01 169 views
1

我在Drupal中使用了一个名为“计算字段”的流行模块。我已经使用这个字段来为几个报价系统进行实时计算。我试图用它来计算时间表类型的应用程序的时间差异。因此,用户输入两次CCK日期字段(使用PHP自定义输入g:i - 即10:20 - 年自动添加),但由于某些原因,我无法获取计算字段以显示任何计算结果。Drupal计算字段 - 计算时间

这是最简单的测试例子...仍然不会工作

$start_value = $node->field_ts_train_start[0]['value']; 
$end_value = $node->field_ts_train_end[0]['value']; 


$node_field[0]['value'] = $end_value - $start_value; 

从这里,我们通过变量$显示。任何人都可以看到为什么这不起作用?我很乐意提供有关如何解决计算字段的建议,或者使用整数而不是UNIX时间戳来构建自定义函数。

谢谢。

回答

2

这里的关键是使用自定义输入字段的日期戳CCK场。日期戳记应包含所有时间级别,自定义输入仅收集HH:MM。这会创建一个完整的unix时间戳。

然后使用计算的字段从结束时间中减去开始时间。这样邮票以整数形式存储,时间可以除以60来获得分钟数。

$start_value = $node->field_ts_start_train[0]['value']; 
$end_value = $node->field_ts_end_train[0]['value']; 
$node_field[0]['value'] = $end_value - $start_value; 
0

使用时间戳键,而不是价值。值是串表示(2010年1月1日),而时间戳是UNIX时间(1234567890)

$start_value = $node->field_ts_train_start[0]['timestamp']; 
$end_value = $node->field_ts_train_end[0]['timestamp']; 
$node_field[0]['timestamp'] = $end_value - $start_value; 
+0

这是很好的信息,这是我第一次尝试做计算随着时间。但是,它仍然存在故障。如果我将“$ node_field [0] ['timestamp']”更改为.... ['value'],我得到一个零,否则我得到NULL(无字段)。日期字段的类型怎么样?我使用“日期”,我应该尝试日期时间还是日期戳? – tpow 2010-01-03 15:31:12

+0

你的答案并不完全正确,还有一些其他变量需要考虑,例如日期字段类型和粒度。我解决了这个问题 - 发布解决方案作为答案.. – tpow 2010-01-04 15:54:11