【问题标题】:Date is showing one day back in another country?日期显示某一天回到另一个国家?
【发布时间】:2016-10-23 21:31:16
【问题描述】:

我正在使用 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 日期 功能?

【问题讨论】:

  • 在DB中如何存储??一天回来??
  • 不喜欢上面的响应,您可以在 db 中看到它的保存“2016-06-22 09:06:22”,当我更改它的格式时,最后它的显示日期为 2016 年 6 月 22 日,但在我的客户在 2016 年 6 月 20 日结束演出。他的国家是美国
  • 有没有办法在我的系统中检查另一个国家的代码

标签: javascript json node.js date ejs


【解决方案1】:

我想知道它是否与时区有关。不同之处可能在于您的服务器的时区和您的客户端的时区。我会尝试使用 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();     

【讨论】:

  • 你能告诉我如何使用moment.js和上面的响应来改变日期格式
  • 有什么方法可以在我的系统中检查另一个国家/地区的代码
  • var date="2016-06-22"; var Date1 = moment(date, 'YYYY-M-D'); var dateStr = Date1.format('MMMM D, YYYY');由于日期值来自 json 响应,它是如何对所有国家/地区的 22?
  • 我会把这个添加到我的答案中
【解决方案2】:

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

考虑使用moment.js timezone 强制日期以X 时区显示,或者按照@abhinsit 的建议将日期以UTC 格式存储在db 中并根据用户时区显示。

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

【讨论】:

  • 你能告诉我如何使用moment.js和上述响应来更改日期格式
  • 有没有办法在我的系统中检查另一个国家的代码
  • var date="2016-06-22"; var Date1 = moment(date, 'YYYY-M-D'); var dateStr = Date1.format('MMMM D, YYYY');由于日期值来自 json 响应,它是如何 22 到所有国家的?
  • @SumitAggarwal 我用小提琴编辑了帖子以显示示例。
【解决方案3】:

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

【讨论】:

  • 问题是我没有保存数据库,而是保存在另一方并从那里得到响应。
  • 我怀疑我有日期作为回应,只需要格式化并像日期一样对数据进行分组。有没有办法用另一种方法格式化日期并将 josn 数据分组到日期明智
  • 当然,您可以使用所使用的任何编程语言更改日期(这需要在时区方面进行)。然后您可以根据新日期对数据进行分组。
  • 你能告诉我如何使用moment.js和上面的响应来改变日期格式
  • 有什么方法可以在我的系统中检查另一个国家/地区的代码。
猜你喜欢
  • 2011-10-16
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多