Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.11.2016, 21:49
Интересующийся
Отправить личное сообщение для Olekos Посмотреть профиль Найти все сообщения от Olekos
 
Регистрация: 30.06.2016
Сообщений: 11

MySQL - DATETIME
В таблице столбец в DATETIME

Пытаюсь получить записи за сегодняшнею дату, но не выходит. Ошибку не выдает. В PHP это вроде так работало.

var d = new Date();
var god = moment(d).format('YYYY');
....

SELECT count(id) as allzv FROM `sip_http` WHERE time = year(`time`) = '+god+' AND month(`time`) = '+mes+' AND day(`time`) = '+day+' AND label = "v";
Ответить с цитированием
  #2 (permalink)  
Старый 14.11.2016, 13:30
Интересующийся
Отправить личное сообщение для Olekos Посмотреть профиль Найти все сообщения от Olekos
 
Регистрация: 30.06.2016
Сообщений: 11

Не понимаю при записи формата DATETIME или DATE
пишет в формате 2016-11-14T10:15:12.000Z

Пытаюсь и через явную запись 2016-11-14 и через NOW()
Ответить с цитированием
  #3 (permalink)  
Старый 14.11.2016, 14:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Olekos
В PHP это вроде так работало.

var d = new Date();
var god = moment(d).format('YYYY');
Нет в РНР ни var, ни всего остального, каким образом оно могло работать?

В MySQL DATETIME, это YYYY-mm-dd HH:MM:SS

WHERE `time` = NOW() - выборка по текущей дате, вот только time, это зарезервировано за MySQL и должно в запросах обрамляться обратными кавычками.
Ответить с цитированием
  #4 (permalink)  
Старый 14.11.2016, 15:55
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Rise,
вы на его код гляньте и на его контекст. И это что такое moment(d).format('YYYY')? Есть в интерфейсе DateTimeInterface метод format(), но либо ::format(), либо ->format(), либо процедурный date_format().
Что-то не пахнет классами из написанного автором, есть не понятно что в стиле JS.

И лучше использовать public вместо var, если уж говорить о классах.
Ответить с цитированием
  #5 (permalink)  
Старый 15.11.2016, 15:11
Интересующийся
Отправить личное сообщение для Olekos Посмотреть профиль Найти все сообщения от Olekos
 
Регистрация: 30.06.2016
Сообщений: 11

Разобрался! Все работает!
Оказалось даты не совпадали в Linux и MYSQL
- вот и выборка не работала

Все что надо было сделать это перегрузить "мускул"
/etc/init.d/mysql restart

По вашим комментариям - "moment" - Это хорошая библиотека форматирования дат и времени - рекомендую!
http://momentjs.com/

А еще главное - внес запись в подключение "dateStrings: true":

var connection = mysql.createConnection({
host : '----------',
port : '----------',
user : '----------',
password : '********',
database : '----------',
dateStrings: true
});

Последний раз редактировалось Olekos, 15.11.2016 в 15:14.
Ответить с цитированием
  #6 (permalink)  
Старый 15.11.2016, 16:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Olekos
По вашим комментариям - "moment" - Это хорошая библиотека форматирования дат и времени - рекомендую!
Ну да, чтобы получить текущую дату средствами РНР, нужно шарахаться по сети выискивая некую чудесную библиотеку, а не использовать единственную готовую функцию date('YYYY')? К тому же в РНР уже есть готовые интерфейсы.
Ответить с цитированием
  #7 (permalink)  
Старый 15.11.2016, 19:31
Интересующийся
Отправить личное сообщение для Olekos Посмотреть профиль Найти все сообщения от Olekos
 
Регистрация: 30.06.2016
Сообщений: 11

Сообщение от laimas Посмотреть сообщение
Ну да, чтобы получить текущую дату средствами РНР, нужно шарахаться по сети выискивая некую чудесную библиотеку, а не использовать единственную готовую функцию date('YYYY')? К тому же в РНР уже есть готовые интерфейсы.
А причем тут PHP? Речь шла только JS. Я написал что такой пример у меня работал на PHP - имея в виду MySQL запрос в базу данных. Я не думал что надо указать на чем код на форуме javascript.ru в рубрике node.js.

Последний раз редактировалось Olekos, 15.11.2016 в 19:33.
Ответить с цитированием
  #8 (permalink)  
Старый 16.11.2016, 05:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Olekos
А причем тут PHP?
Потому, что вы пишите

В PHP это вроде так работало.

var d = new Date();
....


то есть контекст с кодом никак не вяжутся, читаешь и ни хрена не понимаешь что пишут. )

А "не то время в MySQL" это известная проблема, можно корректировать его под локальное сервера SET time_zone = 'смещение часового пояса'. Будет этого мало придется немного попотеть. )
Ответить с цитированием
  #9 (permalink)  
Старый 20.11.2016, 20:43
Аспирант
Отправить личное сообщение для -VenoM- Посмотреть профиль Найти все сообщения от -VenoM-
 
Регистрация: 31.10.2016
Сообщений: 44

Похожий вопрос, но в nodejs.

Есть столбец в MYSQL формата date.

Обновляется он без проблем, например:

connection.query("UPDATE `master_devices` SET `UpDate` =('"+ year +"' '-' '"+ month +"' '-' '"+ date +"') WHERE  `master_devices`.`Master_ID` ='"+ tempdata[1] +"';");//обновить дату


А вот вставлять таблицу с заполнением этого столбца - ну никак!
Уже пробовал и STR_TO_DATE и двойные кавычки - нифига

connection.query("INSERT INTO `master_log`(Customer_ID, Master_ID, UpDate) VALUES ('"+ Customer_ID +"','"+ tempdata[1] +"','2016-11-11');");
Ответить с цитированием
  #10 (permalink)  
Старый 21.11.2016, 02:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Лишнее зачем в запросах писать? Если данные обработаны перед записью, то

connection.query("UPDATE master_devices SET `UpDate` = '"+ year +"-"+ month +"-"+ date +"') WHERE  Master_ID = '"+ tempdata[1] +"'");


`UpDate` - потому, что это зарезервировано за MySQL. Если Master_ID и Customer_ID это числа, то заключать их в кавычки не требуется

WHERE Master_ID = "+ tempdata[1]);

connection.query("INSERT INTO master_log (Customer_ID, Master_ID, `UpDate`) VALUES ("+ Customer_ID +", "+ tempdata[1] +", '2016-11-11')");


То есть в запросе на вставку будет конфликт с именем поля UpDate если это имя не обрамлено в обратные кавычки, регистр для MySQL не важен. Ошибки нужно анализировать.

Если вставка/обновление (или только обновление) записи должна производится по текущей дате, то указывать дату в запросах нет необходимости. Полю типа TIMESTAMP можно задать атрибут on update CURRENT_TIMESTAMP и значение по умолчанию CURRENT_TIMESTAMP.

Последний раз редактировалось laimas, 21.11.2016 в 03:04.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Node.js + mysql mazahist Node.JS 4 17.11.2016 19:07
Концептуальная разница connection и pool модуля mysql andryxx Node.JS 2 17.03.2016 13:33
NODE.js и MySQL проверка. 715kg AJAX и COMET 0 11.10.2015 19:02
Как убрать ненужный тег br при выводе из Mysql mnpartner AJAX и COMET 1 25.09.2014 08:47
Не подключается MySql super-php Серверные языки и технологии 1 02.08.2013 01:26