2012-11-27 12 views
5

Ho un campo data nel database che memorizza solo la data senza orario. Ora voglio sapere il numero di giorni di differenza nella data corrente e il mio campo data mentre lo visualizzo nella pagina jsp.display Data diff in jsp

quindi dovrei avere come

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

nota, oggi è 27 novembre, non 30 novembre. – BalusC

+0

Grazie per avermi corretto BalusC. Ho modificato la mia domanda – user965884

risposta

9

Non c'è niente di simile in serie JSTL. Una funzione EL personalizzata sarebbe la soluzione migliore.

Prima implementare alcuni metodi statici che svolge il lavoro:

public final class Functions { 

    private Functions() {} 

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

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

} 

Se si registra come segue 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> 

allora sarete in grado di usarlo come segue, a condizione che #{bean.date} restituisce un'interessante java.util.Date:

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

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

L'implementazione è gratuita per la vostra scelta. Io personalmente preferisco 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(); 
} 

Oppure, se siete limitati a API standard di Java, cado di nuovo alla ben nota Calendar boilerplate (purtroppo, JSR-310 non ha fatto in Java 7, noi' ve per wait per 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

Si può provare qualcosa di simile: -

<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

In che modo esattamente l'oggetto 'diff' è utile qui? – BalusC

+0

Mi dispiace ma è sbagliato utilizzarlo? Mi ha solo colpito la testa. Plz correggimi se sbaglio !! –

+0

Non dà risultati errati o così, ma qui non ha assolutamente senso. Stai solo ambientando/ricevendo lo stesso tempo. Basta omettere il 'diff' del tutto e assegnare direttamente il risultato di' Math.abs() 'a' timediff'. Si noti inoltre che questa sintassi è JavaScript mentre l'OP sta chiedendo come farlo in JSP (che è basato su Java). – 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.");