У меня есть столбец в базе данных postgres с типом date
.Это столбец, похожий на день рождения, который является просто датой и не должен иметь часть времени.
При извлечении этого столбца с помощью knex результатом является объект Date в формате javascript.Предположительно он выполняет new Date(row.birthday)
, и это результат, который отправляется клиенту.
Проблема в том, что значение, которое получает клиент, находится в стандартном формате ISO 8601 с временной частью иZ
.Когда клиент пытается создать новый объект Date из этой строки, клиент может иметь ошибочное значение даты в зависимости от того, где находится клиент.
Например:
Date: 2018-06-15
Date sent to client: 2018-06-15T00:00:00Z
Client in +5:00 | Client in -5:00
2018-06-16 05:00:00 | 2018-05-15 10:00:00
ЭтоХорошо, если сервер находится в UTC, мы могли бы просто добавить смещение часового пояса клиента и получить исходную дату, но это выглядит немного хрупким и ломается во время локальной разработки (чего нет в UTC).
ПростойРешение состоит в том, чтобы просто отправить часть даты в виде строки клиентам.Но это потребовало бы сохранения даты как varchar
на сервере, что мы не хотим делать.Мы потеряли бы ограничение на форматирование даты и усложнили бы вычисления на основе даты с помощью SQL.
Мы могли бы привести столбец к типу varchar
при выборе столбца, но нам нужно иметь в виду наличие умаэто каждый раз, когда эта таблица выбирается.Это также означает, что нам нужно обойти ORM (Книжную полку) для работы с этой таблицей.
Существует ли простой способ указать, либо в knex, либо на книжной полке, либо непосредственно в postgres, что столбец должен хранитьсякак date
со всеми сопутствующими ограничениями, но всегда выбирается как varchar
?