display Date diff in jsp

前端 未结 3 1031
逝去的感伤
逝去的感伤 2021-01-13 06:46

I have a date field in database which store just date without time. Now I want to know the number of days difference in current date and my date field while displaying that

相关标签:
3条回答
  • 2021-01-13 07:01
      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.");
    
    0 讨论(0)
  • 2021-01-13 07:11

    You can try something like this:-

    <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>
    

    0 讨论(0)
  • 2021-01-13 07:14

    There's nothing like that in standard JSTL. A custom EL function would be your best bet.

    First implement some static methods which performs the job:

    public final class Functions {
    
        private Functions() {}
    
        public static int daysBetween(Date before, Date after) {
            // ...
        }
    
        public static int daysUntilToday(Date date) {
            // ...
        }
    
    }
    

    If you register it as follows in /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>
    

    then you'll be able to use it as follows, provided that #{bean.date} returns a fullworthy java.util.Date:

    <%@taglib uri="http://example.com/functions" prefix="f" %>
    
    ${f:daysUntilToday(bean.date)} days
    

    The implementation is free to your choice. I'd personally prefer 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();
    }
    

    Or if you're restricted to standard Java API, fall back to the well known Calendar boilerplate (unfortunately, JSR-310 didn't made it into Java 7, we've to 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;
    }
    
    0 讨论(0)
提交回复
热议问题