2012-11-27 29 views
5

私は時間のない日付だけを格納するデータベースの日付フィールドを持っています。今、私は、現在の日付と日付フィールドの日数の違いをJSPページで表示しながら知りたいと思っています。表示日付差分はjsp

ので、私はあなたがこのような何か試すことができます

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

注、今日では11月27日、11月30日ではないのです。 – BalusC

+0

BalusCを訂正してくれてありがとう。私の質問を変更しました – user965884

答えて

9

標準JSTLでそのようなものはありませんが。カスタムEL機能があなたの最善の策になります。 /WEB-INF/functions.tldに次のようにあなたがそれを登録した場合

public final class Functions { 

    private Functions() {} 

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

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

} 

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

実装は自由に選択できます。

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にそれを作っていなかった、私たちは」にフォールバック:私は個人的にJoda Timeを好みますJavaの8のためのwait)にVEの:

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

のように持っている必要があります: -

<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

'diff'オブジェクトはどのくらい正確にここで役に立つのですか? – BalusC

+0

申し訳ありませんが、それを使用するのは間違っていますか?それはちょうど私の心を打ちました。私が間違っている場合、私は正しいplz! –

+0

間違った結果を出すことはありませんが、ここではまったく使用されていません。あなたはちょうどその中で同じ時間を設定/取得しています。単に 'diff'を省略し、' Math.abs() 'の結果を' timediff'に直接代入してください。また、OPがJSP(Javaベース)でそれを行う方法を尋ねている間、この構文はJavaScriptであることにも注意してください。 – 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.");