2012-01-26 102 views
4

我有一个日期,并且想要显示它与当前时间的差异为--year--month--days--hours--minutes--seconds。我怎样才能做到这一点?可以肯定的是,日期会比当前的日期时间更长。jstl获取日期差异

回答

0

马克取我不确定这是否使用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

希望这有助于。

2

使用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. 

但作为代码所暗示的,这给整体差异,几乎可以做它的“日历知道”的方式。即您不能说:“自otherDate以来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)。