2013-11-19 3 views
12

Я пытаюсь написать запрос, который принимает объект даты Javascript, а затем помещает его в тип объекта, который распознается как типами SQL Server, так и Oracle.Дата Javascript для объекта даты sql

Проблема в том, что я использую веб-службы. Поэтому он должен быть строкой, а не фактическим переданным параметром. Вот что я имею в виду:

var date = new Date(); 
var firstDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1); 
var lastDayOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0); 

var webServicesQueryWhereClause = 'readDate BETWEEN '+firstDayOfMonth+' AND '+lastDayOfMonth; 

Кроме firstDayOfMonth и lastDayOfMonth окружены что-то вроде to_date() на самом деле положить их в формат даты, что базы данных можно прочитать. Например:

var webServicesQueryWhereClause = 'readDate BETWEEN to_date('+firstDayOfMonth+') AND to_date('+lastDayOfMonth+') '; 

То, что я должен использовать, чтобы поставить эти даты в форме, которая может быть прочитана как SQL Server и Oracle?

+0

Как это выполняется? Какую библиотеку вы используете? Обычно лучше оставить его в БД, чтобы решить, как перевести объект даты в распознанный формат (однако это может быть невозможно в вашем случае). – James

+0

Я бы предложил создать строку запроса на уровне веб-службы, если это не код node.js. Если вы используете asp.net, посмотрите: http://momentjs.com/docs/#/parsing/asp-net-json-date/ – guiomie

+0

@James Я использую библиотеку атмосферы и javax.jws сервер для обработки веб-сервисов. – Graham

ответ

28

Вы пробовали решения, представленные здесь:

Convert JS date time to MySQL datetime

Название должно быть названо

"Преобразование даты JS в SQL DateTime"

мне довелось нужно сделать то же самое как вы сейчас, и я столкнулся с этим после вашего вопроса.

Это из другого поста по Gajus Kuizinas для тех, кто хочет ответы на этой странице:

var date; 
    date = new Date(); 
    date = date.getUTCFullYear() + '-' + 
      ('00' + (date.getUTCMonth() + 1)).slice(-2) + '-' + 
      ('00' + date.getUTCDate()).slice(-2) + ' ' + 
      ('00' + date.getUTCHours()).slice(-2) + ':' + 
      ('00' + date.getUTCMinutes()).slice(-2) + ':' + 
      ('00' + date.getUTCSeconds()).slice(-2);  

или

new Date().toISOString().slice(0, 19).replace('T', ' '); 

Первый работал для меня. У меня также была эталонная проблема с toISOString, хотя я бы предпочел один лайнер. Может ли кто-нибудь уточнить, как использовать его и узнать ограничения на то, где можно ссылаться? Удачи!

+1

Поддержка 'toISOString' - это IE9 + http://kangax.github.io/compat-table/es5/#Date.prototype.toISOString – Justin

+4

Вопрос был о MS SQL (T-sql), а не mysql: / –

Смежные вопросы