json与日期问题

时间:2014-03-20 06:57:19

标签: jquery json

我正在尝试使用JSON.stringify从db获取当前日期的事务。但它在java bean对象中占用了上一个日期。

我选择开始日期和结束日期到当前日期(2014年3月20日)。以下是jsp json中的代码。

var json = {
    "reportTypeId" : reportTypeId,
    "fromDate" : $.datepicker.formatDate('yy-mm-dd', fromDate),
    "toDate" : $.datepicker.formatDate('yy-mm-dd',toDate),
    "jurisdictionId" : jurisdictionId 
};
alert(JSON.stringify(json));

$.ajax({
        url : "adminviewreports/displayReports",
        type : "POST",
        dataType : 'json',
        contentType : 'application/json',
        data : JSON.stringify(json),
        success : function(data) { 
            $("#spinner").hide();
            if (reportTypeId == 2) {    
                loadAuditTable(data);
                $('#activity').show();
                $("#auditReportDiv").show();
            }
            if (reportTypeId == 3) {
                loadSecurityTable(data); 
                $('#security').show();
                $("#securityReportDiv").show();
            }
        },
        error : function() {
           $("#spinner").hide();
           alert("Error Occurred while getting audit events");
        }
});

并且在java bean对象中的日期是

private Date fromDate;
private Date toDate;
public Date getFromDate() {
    LOGGER.error("in bean fromDate============"+fromDate);
    return fromDate;
}
/**
 * @param fromDate the fromDate to set
 */
public void setFromDate(Date fromDate) {
    this.fromDate = fromDate;
}
/**
 * @return the toDate
 */
public Date getToDate() {
    LOGGER.error("in bean toDate============"+fromDate);
    return toDate;
}
/**
 * @param toDate the toDate to set
 */
public void setToDate(Date toDate) {
    this.toDate = toDate;
}

如果我将警报放在json中,我将当前日期设置为2014-03-20,但在将此日期设置为javabean对象时,它将于2014年3月19日20:00:00 EDT 2014.如果我部署代码在当地的机器(印度)我得到了正确的日期。但是,如果我在位于美国的机器中部署代码,我就会遇到这个问题。任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:0)

India is 9:30 hours ahead of USA

Javascript / jquery将从客户端机器读取时间。 由于您在印度使用浏览器,因此获得20-03-2014。

服务器机器部署在美国。对于该服务器系统,当前日期 Wed Mar 19 20:00:00 EDT 2014 ,因此javabean对象正在使用该时间。

这就是你得到不同日期的原因

答案 1 :(得分:0)

确定您必须发送和使用时区的问题。

服务器端,在名为timezone的json中添加一个新字段,将其设置为日期的正确时区(以毫秒为单位),然后将其发送给客户端。

用户端,添加此

var jetLag = 0;
var serverTimeZone = json.timeZone;
var userTimeZone = new Date().getTimeZone() * 60 * 1000;

if( serverTimeZone > userTimeZone ){

    jetLag =  Math.abs(serverTimeZone - userTimeZone);

else {

    jetLag = -Math.abs(serverTimeZone - userTimeZone);

};

var dateWithOffset = new Date(oldDate.getTime() + jetLag);