仅将Timeago日期格式用于24小时之前


8

我想将Timeago模块用作日期格式。但是,当时间超过24小时时,我希望它显示另一种格式(例如2013年2月4日),类似于Twitter或Dribbble的使用。

我试图调整代码,但是我的技能让我失望了:/

是否可能有一个更好的模块来解决这个问题?还是我必须自己做?

我找到了这段代码,代码显示了我希望它如何工作,但是我不知道如何将其实现为drupal。

任何帮助表示赞赏,谢谢。


如果尚未请求Timeago模块,这将是一个很棒的功能请求。
贝丝

@beth我只是浏览了模块的问题,似乎并没有要求它。除非您想做,否则我明天会创建一个问题(今天没有时间):)
Alex

您尝试对代码进行哪些调整?这个日期在您的网站上显示在哪里?
贝丝

@beth我试图仅在seconds变量小于86400(24h)时运行jquery.timeago.js文件中的代码。但是,我必须使整个模块不运行,否则它不会显示其他格式,因为它仍在覆盖它们。
亚历克斯

我创建,可以发现一个问题,在这里
亚历克斯

Answers:


1

用户是否真的在页面上停留了很长时间,是否需要通过javascript更新这些日期?他们中的大多数人都会单击某些内容,并最终在某个时候重新加载整个页面。因此,也许php解决方案也是一个选择?

您可以使用“ 自定义格式化程序”模块来实现php解决方案。

如果使用以下代码创建新的php类型的自定义格式化程序,请确保它是一个datetamp类型:

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

创建格式化程序时,请确保选择字段类型“ datestamp”。创建格式化程序后,请在内容类型的“管理显示”选项卡中,将字段设置为使用此格式化程序。

如果您没有将日期存储为单独的字段,则可以通过安装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文件?我真的不知道该放在哪里。
亚历克斯

您将需要在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 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.