【问题标题】:issue in json with date带有日期的 json 问题
【发布时间】:2014-03-20 06:57:18
【问题描述】:

我正在尝试使用 JSON.stringify 从数据库中获取当前日期的交易。但它在 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 年 EDT 20:00:00 Wed Mar 19 20:00:00。如果我部署代码在本地机器(在印度)我得到了正确的日期。但是如果我在位于美国的机器中部署代码,我就会遇到这个问题。谁能帮我解决这个问题?

【问题讨论】:

  • 如下答案所示,问题是客户的日期被视为绝对时间。该问题可以通过使用 ISO 时间戳或使用 UTC 毫秒方法来保存日期来解决。你能分享更多关于你将使用日期值的内容吗?
  • @aravind 我检查了数据库中的日期和 20 日,数据库中当前日期的记录很少。但是由于 java 对象的日期是以前的日期,所以它没有显示数据。
  • 好的,然后尝试检查何时从客户端收到它。如果在保存到数据库和数据库之前它仍然是当前日期,那么你的问题在于从你的数据库中读取日期。不是 JSON,因为 JSON 只是向服务器“14-03-20”发送一个字符串
  • 它正在为任何事件保存当前日期。但问题是通过 json 调用将当前日期作为输入参数传递时,它在 json 转换的 java bean 对象中取上一个日期。

标签: jquery json


【解决方案1】:
India is 9:30 hours ahead of USA

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

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

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

【讨论】:

  • 我检查了美国框中的日期,它显示:Thu Mar 20 03:23:18 EDT 2014
【解决方案2】:

好的,要解决您的问题,您必须发送并使用时区。

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

用户端,添加这个

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

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 2011-01-27
    • 1970-01-01
    相关资源
    最近更新 更多