У меня нет полной картины ваших настроек, но да, при сохранении дат петлевое преобразование конвертируется в UTC из местного времени. Если вы заглянете в коннектор mysql, то обнаружите следующую функцию, которая создает строку datetime
из значений UTC на указанную дату:
function dateToMysql(val) {
return val.getUTCFullYear() + '-' +
fillZeros(val.getUTCMonth() + 1) + '-' +
fillZeros(val.getUTCDate()) + ' ' +
fillZeros(val.getUTCHours()) + ':' +
fillZeros(val.getUTCMinutes()) + ':' +
fillZeros(val.getUTCSeconds());
function fillZeros(v) {
return v < 10 ? '0' + v : v;
}
}
Однако следует восстановить дату по местному времени при загрузке, поскольку он инициализирует объект javascript Date
из сохраненной строки, которая преобразуется в местное время:
val = new Date(val.toString().replace(/GMT.*$/, 'GMT'));
Наилучшим вариантом, вероятно, является использование ловушек операций и манипулирование данными при их поступлении в / из вашей модели. Например, вы можете отформатировать дату по своему усмотрению, так как данные загружаются из хранилища данных:
Order.observe("loaded", (ctx, next) => {
if (ctx.data) {
ctx.data.delivery_date_formatted = tzFormat(ctx.data.delivery_date);
}
next();
});
Вы также можете подойти к этому с другой стороны и манипулировать данными, которые сохраняются. Вы не можете на самом деле запретить циклическому сохранению даты в формате UTC, но вы можете добавить или удалить смещение часового пояса, чтобы, как только оно было удалено с помощью разъема обратной связи, оно сохраняло строку с вашим местным временем (ОЧЕНЬ хак, я бы не стал рекомендовать его). Пример:
Order.observe("before save", (ctx, next) => {
if (ctx.instance) {
ctx.instance.delivery_date = new Date(
Date.UTC(
ctx.instance.delivery_date.getFullYear(),
ctx.instance.delivery_date.getMonth(),
ctx.instance.delivery_date.getDate(),
ctx.instance.delivery_date.getHours(),
ctx.instance.delivery_date.getMinutes(),
ctx.instance.delivery_date.getSeconds()
)
);
}
next();
});