2012-07-24 76 views
3

我有一個代碼,用於從日曆中選擇一個日期,但我想將current_date設置爲提到的日曆中服務器的日期。並且具有將client_dateserver_date進行比較的功能。如何比較客戶日期和服務器日期?

+5

通過將日期作爲字符串傳遞並將其轉換爲適當的Date對象在兩側,您將爲自己節省很多痛苦。 – jbabey 2012-07-24 13:06:51

+0

你這樣做的目的是什麼?可能有無數其他方法來解決實際案例。 – 2012-07-24 13:08:02

+0

爲什麼你的暱稱Balasaheb呢? ;)(只是一個笑話,試圖將你的名字翻譯成阿拉伯語,這意味着沒有朋友;)) – GingerHead 2012-07-24 13:31:47

回答

2

這是可能的。至於其他地方的建議,你應該將日期轉換爲字符串的原因有兩個:

  1. 更容易閱讀/理解當你搜索一個bug
  2. 「當前時間」始終是客戶端和服務器
之間的不同

要將當前日期發送給客戶端,您可以使用隱藏的表單字段或AJAX請求或Web服務或REST或JSON或JSONP或...以及有太多的方法來執行它。

比較日期字符串轉換爲Date對象,然後用通常的方法對它們進行比較(在Java中compareTo()<==>在JavaScript)。

0

這樣做的一種方式是將當前日期從服務器腳本傳遞到模板,因此當頁面呈現時,JavaScript可以訪問它並進行比較。這有一個明顯的問題 - 如果用戶將頁面打開到第二天,該日期將過期。

其他方法是使用對您的後端的異步調用並從那裏獲取日期。

1

您可以通過以下方式做到這一點:

在Java

public class YourJavaClass{ 
public static String getServerDate() 
{ 
    Calendar cal = Calendar.getInstance(); 

    return cal.get(Calendar.YEAR) + "-" + cal.get(Calendar.MONTH) + "-" + cal.get(Calendar.DATE); 
} 
} 

在JSP中

$('input.datepicker').datepicker(
{ 
    minDate : new Date(<%out.print(YourJavaClass.getServerDate());%>) 
}); 
+0

你不需要引號嗎? – 2012-07-24 13:15:02

+0

我在這裏使用的datepicker是jquery-ui datepicker – Gunhan 2012-07-24 13:59:37

0

最簡單的方法是用對話日期都比較毫秒。兩種語言都爲它提供了方法。

的Javascript:

<script type=""> 
    var myDate = new Date(); 
    var milliseconds = myDate.getTime(); 
</script> 

的Java(JSP):

<script type="text/javascript"> 
<%! 
    Date myJavaDate = new Date(); 
    long myJavaMilliseconds = 0L; 
    myJavaMilliseconds = myJavaDate.getTime(); 
%> 
var myJavaMillisondsInJs = <%= myJavaMilliseconds %>; 
</script> 

/*這裏寫代碼,在此期間進行比較*/

如果你想比較dateas服務器端必須通過Ajax或表單將javatime提交給服務器。

+0

使用毫秒是一個好主意,因爲它們基於相同的偏移量(1.1.1970)。他們是一個壞主意,因爲在任何時間點,客戶端和服務器上的值將會不同。並且不要忘記時區和DST。 – 2012-07-24 13:17:20

+1

@Aron:你說得對。就我所能理解的問題而言,他知道服務器端和客戶端時間的區別(我想他知道它是^^)。 – reporter 2012-07-24 13:21:18