Операции с датой (formatDate) в библиотеке JSTL

Рейтинг: 1Ответов: 1Опубликовано: 20.03.2011

Пишем в jsp:

<fmt:formatDate value="${myTimestamp}" pattern="HH:mm, EEEE, dd MMM yyyy" var="time"/>

Результат:

19:16, понедельник, 07 мар 2011

Хочу сделать, чтобы выводилось так:

19:16 (вчера)
19:16 (позавчера)

и т.д. Возможно ли сделать это с помощью JSTL FMT formatDate?


Был найден такой вариант:

переменная ${now} равна кол-ву дней с начала года

<fmt:formatDate value="<%=new Date()%>" var="now" pattern="D"/>

таким же образом получаем свой день, вычитаем один из другого и получаем кол-во дней, которое прошло.

Ответы

▲ 2Принят

Думаю, нельзя. Но вы всегда можете написать свою кастомную функцию, которая отформатирует вам как надо и прописать её через TLD, а подом в JSP подключить и использовать.

Например (упрощённо):

Класс реализация (здесь реализуете нужную логику форматирования)

private class MyDataFormatter {
    public static String formatDate(Date date) {
        // my format implementation in Java
    }
}

Создаёте TLD-дескриптор (описываете функции, которые можно будет использовать в JSP, в том числе и без JSTL):

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
  <tlib-version>1.0</tlib-version>
  <short-name>myDateFunctions</short-name>
  <uri>/WEB-INF/tlds/myDateFunctions</uri>

  <function>
      <name>formatDate</name>
      <function-class>my.package.MyDataFormatter</function-class>
      <function-signature>java.lang.String formatDate(java.util.Date date)</function-signature>
  </function>
</taglib>

Подключаете и используете в JSP

<%@ taglib prefox="dd" uri="/WEB-INF/tlds/myDateFunctions" %>

<!-- какой-то код -->

<span class="date-node">${dd:formatDate(item.date)}</span>

<!- дальще какой-то код -->