我想查询插入日期介于两个日期之间的记录,如下所示:
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中的结果是这样的:
但是在服务器端(我使用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"}
]
我想查询当月从1号到最后一天插入的产品,我在mysql中得到了正确的结果,但在服务器节点js中得到了错误的结果,在第三个对象中也显示了上个月的日期。不仅如此,甚至在服务器端的日期格式也不同
3条答案
按热度按时间oprakyz71#
这看起来像是时区问题。节点日期使用的是标准格式(ISO 8601)表示日期/时间。末尾的
Z
表示时间为UTC时间。mysql显示的是本地时间。请参阅https://dev.mysql.com/doc/refman/5.7/en/datetime.html。本地时间可以表示mysql服务器时区或连接的时区(可能是相同的),这取决于你如何设置你的连接。从上面的输出,我的猜测是,你是在一个时区,这是至少提前5.5小时的UTC时间。UTC+5:30将是印度或斯里兰卡。所以,也许你是在这些地方之一,或以东的地方。一些选项,在您的节点mysql连接,你可以设置时区。例如,见连接选项在这里:https://www.npmjs.com/package/mysql#establishing-connectionsqnakjoqk2#
我面临着同样的问题,巧合的是,同样的时差(我也来自格林尼治标准时间+05UNK)。
你所要做的就是在建立与数据库的连接时,设置时区,如下所示:
这将为您提供日期或日期时间sql值,作为具有相同值的javascript Date()对象,以便您根据需要的时区进行更改...:)
tzdcorbm3#
添加-〉日期字符串:true,-〉添加到MySQL配置中,将以与数据库相同的格式给予日期:2018-02-01
输出:“产品_日期”:“2022年12月15日”