Здравствуйте, c-smile, Вы писали:
CS>Я честно говоря не понимаю твою проблему...
CS>Мне кажется ты как-то неправильно это все интерпретируешь.
CS>То как ты кодируешь дату или время при JSON передаче абсолютно не релевантно. Это функция твоего контроллера который стоит между моделью данных и view.
Попробую на пальцах
| | Пример (рядом нужно положить plus.tis и plus.css): |
| | <html>
<head>
<style>
@import url(plus.css);
</style>
<script type="text/tiscript">
include "plus.tis";
var Model = {
date: new Date();
}
function self#test1.onClick()
{
view.msgbox(#alert, self#date.value);
}
function self#test2.onClick()
{
view.msgbox(#alert, String.printf("%v", Model));
}
function self#test3.onClick()
{
var d = new Date("2015-03-24T21:00:00");
view.msgbox(#alert, Date.timeZoneOffset());
d.millisecond += Date.timeZoneOffset();
view.msgbox(#alert, d.toLocaleString());
Model.date = d;
}
</script>
</head>
<body>
<form model="Model">
Case date: <input type="date" name="date" id="date" />
</form>
<div model="Model">
Date: <output name="date" type="date"/> Time: <output name="date" type="time"/>
</div>
<button id="test1">Show control date</button>
<button id="test2">Show JSON</button>
<button id="test3">Set date</button>
</body>
</html>
|
| | |
a) Ввожу дату — 25.03.2015
б) На сервер приходит 2015-03-25T21:00:00 (UTC). Я эту дату сохраняю в базу
в) Теперь клиент перезапрашивает данные и мне нужно эту дату отрисовать например в <table>.
в.1) Сервер отдает дату, хранящуюся в базе данных as is. Выполним в Sciter self#date.value = new Date("2015-03-24T21:00:00"). В datepicker-е рисуется 24.03.2015
в.2) Сервер должен отдать клиенту дату с учетом клиентской TimeZone. Но откуда он ее в общем случае знает?
в.3) Клиентский контроллер должен сам интерпретировать полученное от сервера значение с учетом TimeZone клиентской рабочей станции: var d = new Date("2015-03-24T21:00:00"); d.millisecond += Date.timeZoneOffset();
В пункте в.3) и заключается весь геморрой, связанный с тем, что нужно везде и всюду держать в уме смещение.
Если выполнить в sciter мой пример, то проблема видна более выпукло. Три элемента прибайндены к одному и тому же полю модели, при этом видно, что date я выбираю 25.03.2015, а в output-ах рисуется 24.03.2015 21:00
CS>JSON не специфицирует никак даты — т.е. это сугубо твой бизнес. Приведи свои форматы дат к Date (UTC) при отправке и получении JSON от сервера и проблемы нет.
CS>И в общем случае сервер обязан хранить даты событий в UTC.
ИМХО это диктуется бизнес-логикой. Взять ту же дату рождения человека — важный учетный и статистический показатель, UTC в данном случае вообще не нужно, а если клиент будет сам даты приводить к UTC — то даже вредно. В самом деле, человек родился 1 января 1960, а в базу ляжет 31 декабря 1959, и человек вылетит из статистики за 1960-й год