2012-11-27 13 views
5

में दिनांक दिनांक भिन्न है मेरे पास डेटाबेस में एक दिनांक फ़ील्ड है जो बिना किसी समय के स्टोर करता है। अब मैं जेएसपी पेज में प्रदर्शित करते समय वर्तमान दिनांक और मेरे दिनांक फ़ील्ड में दिनों के अंतर की संख्या जानना चाहता हूं।जेएसपी

तो मैं

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

ध्यान दें, आज यह 27 नवंबर, नहीं 30 नवंबर की। – BalusC

+0

मुझे BalusC को सही करने के लिए धन्यवाद। मैंने अपना प्रश्न – user965884

उत्तर

9

वहाँ है कि मानक JSTL में ऐसा कुछ नहीं है। एक कस्टम ईएल समारोह आपकी सबसे अच्छी शर्त होगी।

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

या यदि आप मानक जावा एपीआई के लिए प्रतिबंधित कर रहे हैं, अच्छी तरह से ज्ञात Calendar बॉयलरप्लेट (दुर्भाग्य से, JSR-310 जावा 7 में इसे बनाया नहीं था, हम करने के लिए वापस गिर जावा 8 के लिए wait) करने के लिए किया है:

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

मुझे खेद है, लेकिन क्या इसका उपयोग करना गलत है? यह सिर्फ मेरे दिमाग पर धक्का दिया। अगर मैं गलत हूं तो कृपया मुझे सही करें !! –

+0

यह गलत परिणाम नहीं देता है, लेकिन इसका पूरी तरह से उपयोग नहीं है। आप बस इसमें एक ही समय निर्धारित/प्राप्त कर रहे हैं। बस 'diff' को पूरी तरह से छोड़ दें और 'Math.abs()' 'timediff' के परिणाम को सीधे असाइन करें। कृपया ध्यान दें कि यह वाक्यविन्यास जावास्क्रिप्ट है जबकि ओपी पूछ रहा है कि जेएसपी (जो जावा आधारित है) में इसे कैसे किया जाए। – 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.");