在jstl中获取日期差异

时间:2012-01-26 09:14:38

标签: date jstl

我有一个约会,希望将其与当前时间的差异显示为--year--month--days--hours--minutes--seconds。我该怎么做这个jstl?确定日期将大于当前日期时间。

3 个答案:

答案 0 :(得分:4)

使用JSTL你可以做一些代码体操,比如:

<jsp:useBean id="now" class="java.util.Date" />
<fmt:parseNumber
    value="${(now.time - otherDate.time) / (1000*60*60*24) }"
    integerOnly="true" /> day(s) passed between given dates.

但正如代码所暗示的,这给出了整体差异,而且很难成为“日历意识”的方式。即你不能说:“ 3年,1个月和2天,因为其他日期”。

这个“天过去......”风格的另一个例子,使用JSP标签并使用“今天/昨天/天后”演示:

<%--[...]--%>
<%@attribute name="otherDate" required="true" type="java.util.Date"%>

<jsp:useBean id="now" class="java.util.Date" scope="request"/>
<fmt:parseNumber
    value="${ now.time / (1000*60*60*24) }"
    integerOnly="true" var="nowDays" scope="request"/>

<fmt:parseNumber
    value="${ otherDate.time / (1000*60*60*24) }"
    integerOnly="true" var="otherDays" scope="page"/>

<c:set value="${nowDays - otherDays}" var="dateDiff"/>
<c:choose>
    <c:when test="${dateDiff eq 0}">today</c:when>
    <c:when test="${dateDiff eq 1}">yesterday</c:when>
    <c:otherwise>${dateDiff} day(s) ago</c:otherwise>
<%--[...]--%>

注意:

在您的软件问题域中,如果以日历方式谈论日期和月份是有意义的,可能您应该在Domain Model中表达。如果没有,至少你应该受益于使用另一个较低的软件层来提供这些信息(例如使用java.util.Calendar或Joda-Time API)。

答案 1 :(得分:0)

不确定使用JSTL是否有任何内置方法。您可以编写自己的标记库,也可以使用下面的表达式语言(EL)。

${(dateObj) - (now.time)}

取自Looking for JSTL Taglib calculate seconds between two dates

答案 2 :(得分:0)

Mark我不确定这是否可以使用JSTL,一种方法是创建自己的自定义标签来处理这个@olly_uk建议。我个人不会在我的JSP上使用任何表达式语言,因为这可能也会影响可读性而不是最佳实践。

构建页面bean时,您也可以使用此计算/日期差异,这样可以避免任何EL或新标记。这也可能有其局限性,例如我不确定用户是否在想要立即显示结果的字段上输入您要检查差异的日期等等,如果您看到我的意思。

另外另一个你可以尝试,根据你的场景使用jQuery来计算和显示差异,我想我会从SO链接这个页面。

How do I get the number of days between two dates in JavaScript?

JQuery Calculate Day Difference in 2 date textboxes

希望这有帮助。