2012-11-27 4 views
5

Ich habe ein Datumsfeld in der Datenbank, die nur Datum ohne Zeit speichern. Jetzt möchte ich die Anzahl der Tage Unterschied im aktuellen Datum und mein Datumsfeld wissen, während das in JSP-Seite angezeigt wird.Anzeige Datum Diff in Jsp

so sollte ich wie

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

Hinweis, heute sind es 27. November, nicht 30. November. – BalusC

+0

Danke für die Korrektur mich BalusC. Ich habe meine Frage geändert – user965884

Antwort

9

Es gibt nichts Vergleichbares, dass in Standard JSTL. Eine benutzerdefinierte EL-Funktion wäre die beste Wahl.

Zunächst einige statische Methoden implementieren, die den Auftrag ausführt:

public final class Functions { 

    private Functions() {} 

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

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

} 

Wenn Sie es registrieren, wie in /WEB-INF/functions.tld folgt:

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

dann werden Sie in der Lage sein, es zu benutzen, wie folgt, vorausgesetzt, dass #{bean.date} gibt einen fullworthy java.util.Date:

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

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

Die Implementierung ist frei zu Ihrer Wahl. Ich würde persönlich Joda Time bevorzugen:

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(); 
} 

Oder wenn Sie auf Standard-Java-API beschränkt sind, fallen zurück auf die gut Calendar vorformulierten bekannt (leider, JSR-310 es nicht in Java 7 gemacht haben, wir die bereits in wait für 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

Sie so etwas wie dies ausprobieren können: -

<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

Wie genau ist das 'diff' Objekt hier nützlich? – BalusC

+0

Es tut mir leid, aber ist es falsch, das zu verwenden? Es hat mich gerade beschäftigt. Plz korrigiere mich wenn ich falsch liege !! –

+0

Es gibt kein falsches Ergebnis oder so, aber es hat hier keinen Sinn. Sie setzen gerade die gleiche Zeit ein. Schließen Sie einfach das 'diff' aus und weisen Sie das Ergebnis von' Math.abs() 'direkt'timediff' zu. Beachten Sie auch, dass diese Syntax JavaScript ist, während das OP fragt, wie es in JSP (das auf Java basiert) gemacht wird. – BalusC

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.");