Use el formato de fecha Timeago solo hace menos de 24 horas

8

Me gustaría usar el módulo Timeago como formato de fecha. Sin embargo, cuando el tiempo ha excedido las 24 h, me gustaría que muestre otro formato (por ejemplo, 4 de febrero de 2013) muy parecido al uso de Twitter o Dribbble.

Traté de modificar el código, pero mis habilidades me decepcionaron: /

¿Existe posiblemente un mejor módulo para esta causa? ¿O tengo que hacer el mío?

Encontré este código que muestra cómo quiero que funcione, sin embargo, no tengo idea de cómo implementar esto en drupal.

Cualquier ayuda es apreciada, gracias.

Alex
fuente
Esta sería una gran solicitud de función para el módulo Timeago si aún no se ha solicitado.
beth
@beth Acabo de revisar los problemas del módulo y no parece que se haya solicitado. Crearé un problema mañana (no hay tiempo para eso hoy) a menos que quieras hacerlo :)
Alex
¿Qué ajustes intentaste hacerle al código? ¿Dónde aparece esta fecha en su sitio?
beth
@beth Intenté hacer que el código en el archivo jquery.timeago.js solo se ejecutara si la variable segundos era menor que 86400 (24h). Sin embargo, tengo que hacer que todo el módulo no se ejecute, de lo contrario no mostrará los otros formatos, porque todavía los anula.
Alex
Creé un problema que se puede encontrar aquí
Alex

Respuestas:

1

¿Los usuarios realmente se sientan en una página durante el tiempo suficiente para que estas fechas deban actualizarse a través de JavaScript? La mayoría de ellos harán clic en algo y terminarán recargando toda la página en algún momento. Entonces, ¿quizás una solución php también sea una opción?

Puede lograr la solución php utilizando el módulo Formateadores personalizados .

Si crea un nuevo formateador personalizado de tipo php, con el siguiente código (asegúrese de que sea un tipo de sello de fecha):

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

Al crear el formateador, asegúrese de seleccionar el tipo de campo 'datestamp'. Una vez que se crea el formateador, en la pestaña de administración de visualización de su tipo de contenido, configure el campo para usar este formateador.

Si no tiene su fecha almacenada como un campo separado, puede aplicar el formateador personalizado a la hora modificada del nodo, instalando el módulo Display Suite .

Si no desea usar ninguno de estos módulos pero quiere hackear algo de php en su tema o algo así, aún puede usar la misma lógica anterior con las funciones format_interval y format_date.

Espero que pueda ayudar.

alexkb
fuente
0

Donde sea que esté usando timeago para mostrar una fecha formateada, ¿un fragmento como el siguiente le ayudará?

// 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);
Amarnath Ravikumar
fuente
¿Se supone que esto se aplica a un archivo .module? Realmente no puedo entender dónde ponerlo.
Alex
Debería encontrar en qué parte del archivo .module timeago se aplican las nuevas fechas y luego podría intentar lo que @Amarnath fue una sugerencia, o algo similar, como una declaración if que envuelve la aplicación real de las nuevas fechas y la condición es algo matemáticas diciendo que si la fecha es mayor que hace 24 horas, haga esto.
CR47
0

Crear un módulo MyCustom

myCustom.module contiene

/**
 * 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');
}

Crea myCustom.install y contiene

/**
 * @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');  
}

Uso:

echo myCustom_format_date(1392532844);
Rupesh
fuente
2
Hola. ¿Podría publicar una explicación? Este sitio está destinado a respuestas , no a código .
Mołot
Sí, por supuesto. Me preocuparé por más respuestas.
Rupesh