Timeagoの日付形式は24時間以内にのみ使用してください


8

Timeagoモジュールを日付形式として使用したいと思います。ただし、前の時間が24時間を超えた場合は、TwitterやDribbbleの使用によく似た別の形式(たとえば、2013年2月4日)を表示したいと思います。

私はコードを微調整しようとしましたが、私のスキルは失望させました:/

この原因のためのより良いモジュールはありますか?または私は自分で作る必要がありますか?

このコードがどのように機能するかを示すコードを見つけましたがこれをdrupalに実装する方法がわかりません。

助けてくれてありがとう、ありがとう。


まだリクエストされていない場合、これはTimeagoモジュールの優れた機能リクエストになります。
2013

@beth私はモジュールの問題を調べたところ、要求されていないようです。あなたがそれをしたくないのでなければ、私は明日問題を作成します(今日はそれをする時間はありません)
Alex

コードに対してどのような調整を試みましたか?この日付はどこに表示されますか?
2013

@beth jquery.timeago.jsファイルのコードを実行しようとしたのは、seconds変数が86400(24h)未満の場合のみです。ただし、モジュール全体を実行しないようにする必要があります。そうしないと、他のフォーマットがオーバーライドされているため、他のフォーマットは表示されません。
Alex

回答:


1

ユーザーは本当にこれらの日付をJavaScriptで更新する必要があるほど長い時間ページに座っていますか?それらのほとんどは、何かをクリックして、ある時点でページ全体をリロードします。おそらく、phpソリューションもオプションですか?

カスタムフォーマッタモジュールを使用して、phpソリューションを実現できます。

次のコードを使用して、新しいphpタイプのカスタムフォーマッターを作成する場合(それが日付スタンプタイプであることを確認してください):

$element = array();
foreach ($variables['#items'] as $delta => $item) {
  $unixstamp = $item['value'];
  $time_since = mktime() - $unixstamp;
  if ($time_since < 86400) {
    $date_str = format_interval($time_since);
  }
  else {
    $date_str = format_date($unixstamp, 'custom', 'jS F Y');
  }

  $element[$delta] = array(
    '#type' => 'markup',
    '#markup' => $date_str,
  );
}
return $element;

フォーマッタを作成するときは、必ずフィールドタイプ「日付スタンプ」を選択してください。フォーマッタが作成されたら、コンテンツタイプの表示管理タブで、このフォーマッタを使用するようにフィールドを設定します。

日付を別のフィールドとして保存していない場合は、Display Suiteモジュールをインストールすることで、ノードの変更時間にカスタムフォーマッターを適用できる場合があります。

これらのモジュールのいずれも使用したくないが、テーマなどにphpをハックしたい場合は、format_intervalおよびformat_date関数で上記と同じロジックを使用できます。

お役に立てれば幸いです。


0

書式設定された日付を表示するためにtimeagoを使用している場合はどこでも、以下のようなスニペットでうまくいきますか?

// Assume $timestamp has the raw Unix timestamp that I'd like to display using
// the "timeago" date format supposing it is within the last 24 hrs and another date
// format - "my_date_format" otherwise.
$rule = ((REQUEST_TIME - $timestamp) <= 24 * 60 * 60);
$fallback = format_date($timestamp, 'my_date_format');
return ($rule ? timeago_format_date($timestamp, $fallback) : $fallback);

これは.moduleファイルに適用されるはずですか?どこに置けばいいかわからない。
Alex

あなたはtimeago .moduleファイルのどこに新しい日付が適用されるかを見つける必要があります、そしてあなたは@Amarnathが提案したもの、または新しい日付の実際のアプリケーションといくつかの条件をラップするifステートメントのような何かを試すことができます数学は、日付が24時間以上前であれば、これを行います。
CR47 2013

0

MyCustomモジュールを作成する

myCustom.moduleには

/**
 * Implements hook_date_formats().
 */
function myCustom_date_formats() {
  $formats = array('g:i a', 'H:i', 'M j', 'j M', 'm/d/y', 'd/m/y', 'j/n/y', 'n/j/y');
  $types = array_keys(myCustom_date_format_types());
  $date_formats = array();
  foreach ($types as $type) {
    foreach ($formats as $format) {
      $date_formats[] = array(
        'type' => $type,
        'format' => $format,
        'locales' => array(),
      );
    }
  }
  return $date_formats;
}

/**
 * Implements hook_date_format_types().
 */
function myCustom_date_format_types() {
  return array(
    'myCustom_current_day' => t('MyCustom: Current day'),
    'myCustom_current_year' => t('MyCustom: Current year'),
    'myCustom_years' => t('MyCustom: Other years'),
  );
}

/**
 * Formats a timestamp according to the defines rules.
 *
 * Examples/Rules:
 *
 * Current hour: 25 min ago
 * Current day (but not within the hour): 10:30 am
 * Current year (but not on the same day): Nov 25
 * Prior years (not the current year): 11/25/08
 *
 * @param $timestamp
 *   UNIX Timestamp.
 *
 * @return
 *   The formatted date.
 */
function myCustom_format_date($timestamp) {
  if ($timestamp > ((int)(REQUEST_TIME / 3600)) * 3600) {
    return t('@interval ago', array('@interval' => format_interval(abs(REQUEST_TIME - $timestamp), 1)));
  }
  if ($timestamp > ((int)(REQUEST_TIME / 86400)) * 86400) {
    return format_date($timestamp, 'myCustom_current_day');
  }
  if ($timestamp > mktime(0, 0, 0, 1, 0, date('Y'))) {
    return format_date($timestamp, 'myCustom_current_year');
  }
  return format_date($timestamp, 'myCustom_years');
}

myCustom.installを作成します。

/**
 * @file
 * Install file for myCustom.module
 */

/**
 * Implements hook_install().
 */
function myCustom_install() {
  // Define default formats for date format types.
  variable_set("date_format_myCustom_current_day", 'g:i a');
  variable_set("date_format_myCustom_current_year", 'M j');
  variable_set("date_format_myCustom_years", 'n/j/y');
}

/**
 * Implements hook_uninstall().
 */
function myCustom_uninstall() {
  variable_del('date_format_myCustom_current_day');
  variable_del('date_format_myCustom_current_year');
  variable_del('date_format_myCustom_years');  
}

使用法 :

echo myCustom_format_date(1392532844);

2
こんにちは。説明を投稿していただけませんか?このサイトは、コードではなく回答です
Mołot

はい、もちろん。私はそれ以上の答えを気にします。
Rupesh 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.