从node.js检索时Mysql日期不同

时间:2018-03-25 11:25:50

标签: javascript mysql node.js

我希望在插入日期介于两个日期之间时查询记录,如下所示:

SELECT `products`.`Product_Name`, `products`.`Product_Type`, `products`.`Product_Date` Where 
`products`.`Product_Date` between CONCAT(YEAR(CURRENT_DATE),"- 
 ",MONTH(CURRENT_DATE),"-","01") and (LAST_DAY(CURRENT_DATE))

MySql中的结果是这样的:

In MySQL result

但是在服务器端(我使用Node.js)结果是不同的,就像这样

[
   {"Product_Name":"Water","Product_Type":"Large","Product_Date":"2018-03-24T18:30:00.000Z"},
    {"Product_Name":"Water","Product_Type":"Small","Product_Date":"2018-03-24T18:30:00.000Z"},
    {"Product_Name":"Water","Product_Type":"Large","Product_Date":"2018-02-28T18:30:00.000Z"},
    {"Product_Name":"Water","Product_Type":"Large","Product_Date":"2018-03-30T18:30:00.000Z"}
] 

我想查询当前月份的当前月份中插入的产品,我在mysql中获得了正确的结果,但在服务器节点js中得到了错误的结果,在第三个对象中它也显示了上个月的日期太。 不仅如此,甚至服务器端的日期格式也不同

2 个答案:

答案 0 :(得分:1)

这看起来像是时区问题。节点日期使用标准格式(ISO 8601)表示日期/时间。最后的Z表示时间是UTC时间。 Mysql正在向您显示当地时间。见https://dev.mysql.com/doc/refman/5.7/en/datetime.html。本地时间可能意味着连接的mysql服务器时区或时区(可能相同),具体取决于您设置连接的方式。根据上面的输出,我的猜测是你所处的时区比UTC时间早至少5个半小时。 UTC + 5:30将是印度或斯里兰卡。所以也许你在其中一个地方,或者在那里的东边。有些选项,在您的节点mysql连接中可以设置时区。例如,请参阅此处的连接选项:https://www.npmjs.com/package/mysql#establishing-connections

答案 1 :(得分:0)

我面临着同样的问题,碰巧也有相同的时差(我也是GMT + 05:30的人)。

您要做的就是在建立与数据库的连接时,设置时区。像这样:

totalCount=$(`wc -l sample.conf`)
penultimate=$((totalCount-1))

sed -n -i "p;{$penultimate}a $var" sample.conf

这将为您提供日期或日期时间sql值,作为具有相同值的javascript Date()对象,以便您根据需要的时区进行更改...:)