2016-06-22 4 views
0

Я работаю с 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 date функция?

+0

В БД как его хранить ?? один день назад? – Subburaj

+0

no like above response вы можете видеть в db его сохранить «2016-06-22 09:06:22», и когда я меняю его в формате, то в конце концов его шоу 22 июня 2016 года, но в конце моего клиента его шоу 20, июнь 2016. Его cuntry является usa –

+0

есть ли способ проверить код с другой страной в моей системе –

ответ

0

Я думаю, что вам нужно магазина время UTC в базе данных и для предоставления данных клиента необходимо установить часовой пояс на основе клиента «s HTTP вызова и возврат времени/даты соответственно.

+0

вещь, которая не сохранена в моем конце, она сохраняет на другой стороне и получает ответ от ther. –

+0

У меня есть сомнения, что у меня есть дата в ответе, просто нужно отформатировать это и сгруппировать данные, подобные дате. Есть ли способ форматировать дату другим методом и группировать данные josn data accouring на дату wise –

+0

Абсолютно, вы можете изменить дату на любом используемом вами языке программирования (это нужно сделать по часовой стрелке). Затем вы можете группировать данные на основе новых дат. – abhinsit

0

Вы, скорее всего, столкнулись с проблемами с часовым поясом с toLocaleTimeString.

Рассмотрите возможность использования moment.js timezone, чтобы указать дату, отображаемую в X-часовом поясе ИЛИ следовать рекомендациям @abhinsit, чтобы хранить даты в UTC в db и отображать в соответствии с часовым поясом пользователей.

Edit: moment.js пример с вашими данными: https://jsfiddle.net/m959mkcr/

+0

Можете ли вы рассказать мне, как я могу использовать moment.js с вышеуказанным ответом, чтобы изменить формат даты –

+0

есть ли способ проверить код с другой страной в моей системе –

+0

var date = "2016-06-22"; var Date1 = момент (дата, 'YYYY-M-D'); var dateStr = Date1.format ('MMMM D, YYYY'); поскольку значение даты исходит от ответа json, так это как 22 для всех стран? –

0

Я интересно, если это связано с часовым поясом. Разница может быть между часовым поясом вашего сервера и часовым поясом вашего клиента. Я бы попытался использовать что-то вроде http://momentjs.com/timezone/ для обработки часовых поясов и иметь поле времени на сервере, хранящемся в часовом поясе UTC.

Вот пример того, как конвертировать 22 июня 2016 года в 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();  
+0

Можете ли вы рассказать мне, как я могу использовать moment.js с вышеуказанным ответом, чтобы изменить формат даты –

+0

есть ли способ проверить код с другой страной в моей системе –

+0

var date = "2016-06-22"; var Date1 = момент (дата, 'YYYY-M-D'); var dateStr = Date1.format ('MMMM D, YYYY'); поскольку значение даты исходит от ответа json, так это как 22 для всех стран? –

Смежные вопросы