2010-01-01 18 views
1

J'utilise un module populaire appelé "Champ calculé" dans Drupal. J'ai utilisé ce champ pour faire des calculs à la volée pour plusieurs systèmes de cotation. J'essaie de l'utiliser pour calculer la différence de temps pour un type d'application de feuille de temps. Ainsi, un utilisateur entre deux fois dans les champs de date CCK (en utilisant l'entrée personnalisée PHP g: i - ie 10:20 - année ajoutée automatiquement) mais pour une raison quelconque, je ne peux pas obtenir le champ calculé pour montrer des calculs.Champ calculé Drupal - Calcul du temps

Voici l'exemple de test la plus simple ... toujours l'habitude de travailler

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

A partir de là, nous passons la variable à l'affichage $. Quelqu'un peut-il voir pourquoi cela ne fonctionne pas? Je suis ouvert à toutes les suggestions sur la façon de contourner le champ calculé, ou de construire des fonctions personnalisées en utilisant des entiers au lieu d'horodatages UNIX ..

Merci.

Tim

Répondre

2

La clé de c'était d'utiliser le timbre dateur champ CCK avec le champ d'entrée personnalisé. L'horodatage doit inclure tous les niveaux de temps, l'entrée personnalisée ne collectant que HH: MM. Cela crée un horodatage unix complet.

Utilisez ensuite un champ calculé pour soustraire l'heure de début de l'heure de fin. De cette façon, le tampon est stocké sous la forme d'un entier, et le temps peut être divisé par 60 pour obtenir le nombre de minutes.

$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

Utilisez la clé d'horodatage, pas de valeur. La valeur est la représentation de chaîne (1er Janvier, 2010), alors que l'horodatage est le temps 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

C'est une bonne information à avoir, c'est la première fois que j'essaie de faire des calculs avec le temps. Cependant, il fonctionne toujours mal. Si je change "$ node_field [0] ['timestamp']" en .... ['value'], j'obtiens un zéro, sinon je reçois la valeur NULL (pas de champ). Qu'en est-il du type de champ de date? J'utilise "Date", devrais-je essayer Datetime ou Datestamp? – tpow

+0

Votre réponse n'est pas exacte, d'autres variables sont à prendre en compte, telles que le type de champ de date et la granularité. J'ai résolu ceci - résolution d'affichage comme réponse. – tpow