Бриз-запрос не извлекает записи, проверяющие столбцы даты в таблице SQL Server.

var shippedFromDt = new Date(2013, 09, 09);
var query = EntityQuery.from('Shipments')
            .where(breeze.Predicate.create("ShipmentDate", ">=", shippedFromDt))
            .orderByDesc("ID")

У меня есть записи в таблице, где дата отгрузки "10/9/2013". Но когда я запускаю запрос выше, я не получаю никаких записей. Если я изменю дату на "10/8/2013", запрос вернет мне записи. Я также использую оператор запроса ">=", поэтому запрос должен возвращать мне данные, когда введена дата "10/9/2013". Я не уверен, что это происходит, потому что shippedFromDt включает в себя информацию о времени, где столбец таблицы хранит только дату. Я пытался создать объект Date, передавая 0 значений для параметров часов, минут и секунд, но это не помогает.

Индекс месяца Javascript начинается с 0, следовательно, 09 используется для октября.

1 ответ

Решение

Это, вероятно, проблема с часовым поясом. По сути, любая дата, которую вы создаете на клиенте, определяется как находящаяся в часовом поясе браузера клиента. Даты, хранящиеся на сервере базы данных, для сравнения, если они не относятся к типам данных DateTimeOffset или DateTime2, определяются без указания часового пояса и, следовательно, могут рассматриваться как имеющие смещение UTC, равное 0. т. Е. GMT. Поэтому лучше всего настроить время клиента по смещению часового пояса клиента, чтобы преобразовать их в время по Гринвичу; что-то вроде этого. (Я не проверял строку ниже, поэтому знак может быть выключен).

var adjustedDate = new Date(yourDate.getTime() - (yourDate.getTimezoneOffset() * 60000));

Подобная проблема обсуждалась на SO

Другой подход состоит в том, чтобы определить вашу дату в виде строки с помощью спецификатора "Z", чтобы указать, что вы хотите, чтобы ваша дата была смещением UTC O, а затем проанализировать строку в дату.

Последний подход заключается в использовании типов данных DateTime2 или DateTimeOffset в вашей базе данных, где смещение часового пояса для всех данных такое же, как на вашем клиенте.

Другие вопросы по тегам