日期显示在另一个国家的一天?

时间:2016-06-22 05:51:46

标签: javascript json node.js date ejs

  

我正在使用node.js和ejs。我有回复的数据

[{"message":"","fileSize":"2132","id":"4225","readBy":"2016-03-01 09:04:50","userID":"23","dateTime"
:"2016-03-01 09:03:57","fileName":"movie.mov","fileTicketID":"e0219f64-fb43-4302-8ec3-848a98545048"}
,{"message":"","fileSize":"64132","id":"4226","readBy":"2016-03-01 09:04:50","userID":"23","dateTime"
:"2016-03-01 09:04:20","fileName":"spanish.rtf","fileTicketID":"905f9905-c406-4514-9410-0443c4baa570"
},{"message":"","fileSize":"93430","id":"4227","readBy":"2016-03-01 10:21:07","userID":"23","dateTime"
:"2016-03-01 09:06:08","fileName":"IP estatica.tiff","fileTicketID":"f9bd81a8-b022-4d53-94e7-8301d30ae5e3"
},{"message":"","fileSize":"45","id":"4228","readBy":"2016-03-01 10:21:07","userID":"23","dateTime":"2016-03-01
 09:06:22","fileName":"Text File.txt","fileTicketID":"85a6adb6-15a9-4742-b7d2-05fcd3fa23c1"}]

我需要明智地显示数据日期。

我确实喜欢下面

var map = {};

msg1.forEach(function(a){
    var key = a.dateTime.substring(0, 10);
    map[key] = map[key] || [];
    map[key].push(a);
});

Object.keys(map).forEach(function(date){
    var dt = new Date(date),
        monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    var dateStr = dt.getDate() + " " + monthNames[dt.getMonth()] + ", " + dt.getFullYear();
    alert(dateStr);
    var el1 = $('<span>' + dateStr + '</span>');
    $(".chat_window ul").append(el1);
    map[date].forEach(function(item){
    //item is the each value in array
    //  alert(item.message);

    var now = item.dateTime;
    var jsDate = toJSDate(now);

    //var dd = jsDate.toLocaleDateString() + " " + jsDate.toLocaleTimeString();
    var msgtime = jsDate.toLocaleTimeString();
    msgtime =  msgtime.replace(/:\d+ /, ' ');
    var el = $('<li class="message right appeared"><div class="avatar"><img src="' + url +
        '/getUserImage/' + item.userID + '/60"/></div><div class="text_wrapper"><div class="text">' +
        item.message + '</div><span>' + msgtime + '</span></div></li>');
});
  

在我结束的一切都很好,它在我的结尾显示日期。但在我的   客户结束它会在一天前显示日期。因为你我已经约会了   作为响应,只需要在日期中格式化或分组数据。所以为什么   它显示了一天的回归。这只是因为javascript日期   功能

3 个答案:

答案 0 :(得分:0)

我认为您需要在数据库中存储UTC时间并向客户提供数据,您应该根据客户端的http调用设置时区并相应地返回时间/日期

答案 1 :(得分:0)

您最有可能遇到toLocaleTimeString的时区问题。

考虑使用moment.js timezone强制日期显示在X时区中或遵循@abhinsit建议以UTC格式存储日期并根据用户时区显示。

使用您的数据编辑:moment.js示例:https://jsfiddle.net/m959mkcr/

答案 2 :(得分:0)

我想知道它是否与时区有关。差异可能在服务器的时区和客户的时区之间。我会尝试使用http://momentjs.com/timezone/之类的东西来处理时区,并将服务器上的时间字段存储在UTC时区中。

以下是如何将2016年6月22日纽约时间下午8点转换为欧洲伦敦时间洛杉矶的示例。

var newYork    = moment.tz("2016-06-22 20:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    
losAngeles.format(); 
london.format();