En Drupal6, format_date()
tiene las fechas y horas codificadas. Además, format_date()
no permite devoluciones de llamada, pero sí permite una cadena personalizada. Ahí es donde puedes aplicar un truco: en lugar de codificar la cadena allí, llamas a una función que devuelve una cadena.
function mydate_format($timestamp) {
$now = time();
if (($now - $timestamp) < (60*60*24)) {
return "H:i";
}
else {
return "d:m:Y";
}
}
print format_date($timestamp, 'custom', mydate_format($timestamp));
La segunda opción es volver a definir una fecha-marca de tiempo, pero que es a la vez hacker y limitado. Los formatos de fecha se definen con variable_get(), pero no pasan la marca de tiempo junto con; por lo tanto, su ejemplo de cambio de formatos basado en el valor de la marca de tiempo no es posible de esta manera.
En settings.php:
$conf['date_format_long'] = $conf['debug'] ? 'r' : 'l, F j, Y - H:i';
Esto cambiará a partir de un valor a otro, en función de si su settings.php tiene una bandera "depuración" establecido en TRUE o no. Como se mencionó: el uso para esto es limitado, ya que no se puede obtener ningún contexto.
La tercera alternativa es usar Date API que ofrece formatos de tiempo configurables en línea. Pero eso es torpe e inseguro (ingresa PHP ejecutable en tu base de datos). También depende de un gran conjunto de módulos. Y tiene el mismo inconveniente que la primera solución: no puede usar format_date, pero debe usar una llamada de función modificada, en lugar de format_date()
. Ver todas las opciones en The Drupal.org date themeing handbook.
GOTCHA En todos los casos, Drupal no llamará a esta función para el contenido en caché. Si desea que las fechas sean realmente dinámicas, debe evitar el almacenamiento en caché o implementar el formato de fecha en el cliente javascript.
TL; DR: No puede tener formatos de fecha dinámicos sin cambiar parte del código en el nivel de tema. Usar una función de devolución de llamada para generar el formato de fecha "personalizado" es la solución más simple y funcional.
Si está mostrando esta fecha como un campo en una vista, entonces se podría usar el archivo plantilla de campo de una vista para manejar la lógica de PHP es necesario para obtener su salida deseada Por otro lado, si este no es un campo de fecha en una vista, y solo está usando el tiempo creado para el nodo, podría usar un archivo de plantilla de nodo para formatear la fecha. Yo soy sin tener en cuenta ninguna función de devolución de llamada que se pueda usar para formatos de fecha, es una idea interesante y definitivamente puedo ver algunas aplicaciones para ella. –
Sí, sé que podría lograr esto a nivel de plantilla/preproceso, pero sería mucho limpio si pudiera crear un formato de fecha personalizado global real ... –