web-dev-qa-db-ja.com

ノードテンプレートのフィールドのタイムスタンプをPHP日付形式に変換する

画像フィールド 'event_image'があり、フィールドのすべての可能な変数を出力すると、レンダリングする画像の可能な変数としてタイムスタンプがあることがわかります。私が使う:

print '<pre>';
var_dump(get_defined_vars());
print '</pre>

// renders:
["timestamp"]=>
string(10) "1348629688"

... node--mycustom.tpl.php変数を取得します。

これで、タイムスタンプを次のようにレンダリングできます。

<?php print $node->field_event_image['und'][0]['timestamp'] ?>

...そして、UNIX形式のタイムスタンプを次のように出力します。

1348629688

これをPHP日付形式に変換したいので、UNIXタイムスタンプをPHP gmdate function。通常、私はraw phpに対して次のようなものを使用します。

  $mytimestamp=1348629688;
  print gmdate("m-d-Y", $mytimestamp);

これは私のタイムスタンプと出力を受け取ります:

09-26-2012

...しかし、私のdrupal 7フィールドとノードテンプレートのコンテキスト内で実行する方法がわかりません。

更新:

以下のcliveのコメントに基づいて、前処理関数が進むべき道であることがわかります。つまり、私のテーマのtemplate.phpファイルには、次のようになります。

function MYTHEME_preprocess_node(&$vars, $hook) {

$node = $vars['node'];
$field_items = field_get_items('node', $node, 'field_event_image');
$vars['upload_date'] = format_date($field_items[0]['timestamp'], 'mdy');

}

...そして、私のカスタムノードテンプレートでは、

<?php print $upload_date; ?>

注意、 'mdy'は、Drupal UIで設定したカスタム形式です。gmdateを使用するよりも優れていると思います。

4
Danny Englander

Mohammed Shameemがすでに指摘したように:

<?php print gmdate("m-d-Y", $node->field_event_image['und'][0]['timestamp']) ?>

ただし、Drupalの方法は次のようになります。

<?php print format_date($node->field_event_image['und'][0]['timestamp'], 'short'); ?>

後者の構成では、サイトに設定されている標準の短い日付形式で日付がレンダリングされます。前者はyo pickという形式を使用します。 Drupalの方法により、日付形式がサイト全体で標準化されます。

6
Free Radical

ユーザーオブジェクトのフィールドに基づく別の例:

  global $user; 
  $curr_user = user_load($user->uid);
  $field_items = field_get_items('user', $curr_user, 'field_some_date_end');

  $datetime = $field_items[0]['value']; // Unix time
  $formatted = format_date($datetime, 'short'); // Date in short format
0
kenorb