У меня есть столбец в базе данных postgres с типом date
. Это такой столбец, как день рождения, который является просто датой и не обязательно должен иметь временную часть.
При извлечении этого столбца с помощью knex результатом является объект даты 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, bookshelf или postgres, что столбец должен храниться как date
со всеми сопутствующими ограничениями, но всегда извлекаться как varchar
?