我有一個代碼,用於從日曆中選擇一個日期,但我想將current_date
設置爲提到的日曆中服務器的日期。並且具有將client_date
與server_date
進行比較的功能。如何比較客戶日期和服務器日期?
回答
這是可能的。至於其他地方的建議,你應該將日期轉換爲字符串的原因有兩個:
- 更容易閱讀/理解當你搜索一個bug
- 「當前時間」始終是客戶端和服務器
要將當前日期發送給客戶端,您可以使用隱藏的表單字段或AJAX請求或Web服務或REST或JSON或JSONP或...以及有太多的方法來執行它。
比較日期字符串轉換爲Date
對象,然後用通常的方法對它們進行比較(在Java中compareTo()
和<
,==
,>
在JavaScript)。
這樣做的一種方式是將當前日期從服務器腳本傳遞到模板,因此當頁面呈現時,JavaScript可以訪問它並進行比較。這有一個明顯的問題 - 如果用戶將頁面打開到第二天,該日期將過期。
其他方法是使用對您的後端的異步調用並從那裏獲取日期。
您可以通過以下方式做到這一點:
在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());%>)
});
你不需要引號嗎? – 2012-07-24 13:15:02
我在這裏使用的datepicker是jquery-ui datepicker – Gunhan 2012-07-24 13:59:37
最簡單的方法是用對話日期都比較毫秒。兩種語言都爲它提供了方法。
的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提交給服務器。
使用毫秒是一個好主意,因爲它們基於相同的偏移量(1.1.1970)。他們是一個壞主意,因爲在任何時間點,客戶端和服務器上的值將會不同。並且不要忘記時區和DST。 – 2012-07-24 13:17:20
@Aron:你說得對。就我所能理解的問題而言,他知道服務器端和客戶端時間的區別(我想他知道它是^^)。 – reporter 2012-07-24 13:21:18
通過將日期作爲字符串傳遞並將其轉換爲適當的Date對象在兩側,您將爲自己節省很多痛苦。 – jbabey 2012-07-24 13:06:51
你這樣做的目的是什麼?可能有無數其他方法來解決實際案例。 – 2012-07-24 13:08:02
爲什麼你的暱稱Balasaheb呢? ;)(只是一個笑話,試圖將你的名字翻譯成阿拉伯語,這意味着沒有朋友;)) – GingerHead 2012-07-24 13:31:47