在jsp中显示日期差异

时间:2012-11-27 16:21:14

标签: jsp jstl

我在数据库中有一个日期字段,它只存储没有时间的日期。现在,我想知道在jsp页面中显示当前日期和日期字段的天数差异。

所以我应该喜欢

 databaseDate(2012-11-30) - currentDate(2012-11-27)  = 3 days

3 个答案:

答案 0 :(得分:9)

标准JSTL中没有类似内容。自定义EL功能将是您最好的选择。

首先实现一些执行作业的静态方法:

public final class Functions {

    private Functions() {}

    public static int daysBetween(Date before, Date after) {
        // ...
    }

    public static int daysUntilToday(Date date) {
        // ...
    }

}

如果您在/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>

然后您就可以按照以下方式使用它,只要#{bean.date}返回一个值得信赖的java.util.Date

<%@taglib uri="http://example.com/functions" prefix="f" %>

${f:daysUntilToday(bean.date)} days

您可以自由选择实施。我个人更喜欢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();
}

或者,如果您仅限于标准Java API,请回到众所周知的Calendar样板(不幸的是,JSR-310没有进入Java 7,我们必须wait for 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;
}

答案 1 :(得分:0)

您可以尝试这样的事情: -

<html>
<head>
<script>
function dateDiff(dateform) {
date1 = new Date();
date2 = new Date();

date1temp = new Date(dateform.firstdate.value);
date1.setTime(date1temp.getTime());

date2temp = new Date(dateform.seconddate.value);
date2.setTime(date2temp.getTime());

timediff = Math.abs(date1.getTime() - date2.getTime());
days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
dateform.difference.value = days;
return false; 
}
</script>
</head>

   

答案 2 :(得分:0)

  Calendar calendar1 = Calendar.getInstance();
  Calendar calendar2 = Calendar.getInstance();
  calendar1.set(2007, 01, 10);
  calendar2.set(2007, 07, 01);

  long milliseconds1 = calendar1.getTimeInMillis();
  long milliseconds2 = calendar2.getTimeInMillis();
  long diff = milliseconds2 - milliseconds1;
  long diffSeconds = diff / 1000;
  long diffMinutes = diff / (60 * 1000);
  long diffHours = diff / (60 * 60 * 1000);
  long diffDays = diff / (24 * 60 * 60 * 1000);

  System.out.println("\nThe Date Different Example");
  System.out.println("Time in milliseconds: " + diff + " milliseconds.");
  System.out.println("Time in seconds: " + diffSeconds + " seconds.");
  System.out.println("Time in minutes: " + diffMinutes + " minutes.");
  System.out.println("Time in hours: " + diffHours + " hours.");
  System.out.println("Time in days: " + diffDays + " days.");