Chẳng gì đó trong tiêu chuẩn JSTL là. Một chức năng EL tùy chỉnh sẽ là đặt cược tốt nhất của bạn.
đầu tiên thực hiện một số phương pháp tĩnh mà thực hiện các công việc:
public final class Functions {
private Functions() {}
public static int daysBetween(Date before, Date after) {
// ...
}
public static int daysUntilToday(Date date) {
// ...
}
}
Nếu bạn đăng ký nó như sau trong /WEB-INF/functions.tld
:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>Custom_Functions</short-name>
<uri>http://example.com/functions</uri>
<function>
<name>daysBetween</name>
<function-class>com.example.Functions</function-class>
<function-signature>boolean daysBetween(java.util.Date, java.util.Date)</function-signature>
</function>
<function>
<name>daysUntilToday</name>
<function-class>com.example.Functions</function-class>
<function-signature>boolean daysUntilToday(java.util.Date)</function-signature>
</function>
</taglib>
sau đó bạn sẽ có thể sử dụng nó như sau, với điều kiện rằng #{bean.date}
trả lại số tiền đầy đủ java.util.Date
:
<%@taglib uri="http://example.com/functions" prefix="f" %>
${f:daysUntilToday(bean.date)} days
Việc triển khai hoàn toàn miễn phí theo lựa chọn của bạn. Cá nhân tôi muốn Joda Time:
public static int daysBetween(Date before, Date after) {
return Days.daysBetween(new DateTime(before.getTime()), new DateTime(after.getTime())).getDays();
}
public static int daysUntilToday(Date date) {
return Days.daysBetween(new DateTime(date.getTime()), new DateTime()).getDays();
}
Hoặc nếu bạn đang giới hạn ở Java API chuẩn, rơi trở lại nổi tiếng Calendar
soạn sẵn (không may, JSR-310 không làm cho nó vào Java 7, chúng tôi ve để wait cho Java 8):
public static int daysBetween(Date before, Date after) {
Calendar c1 = createCalendarWithoutTime(before);
Calendar c2 = createCalendarWithoutTime(after);
int days = 0;
for (;c1.before(c2); days++) {
c1.add(Calendar.DATE, 1);
}
return days;
}
public static int daysUntilToday(Date date) {
return daysBetween(date, new Date());
}
private static Calendar createCalendarWithoutTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar;
}
Lưu ý, hôm nay đó là ngày 27 tháng 11, chứ không phải ngày 30 tháng 11. – BalusC
Cảm ơn bạn đã sửa tôi BalusC. Tôi sửa đổi câu hỏi của tôi – user965884