我正在使用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日期 功能
答案 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();