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

llmtgqce  于 2022-12-18  发布在  Node.js
关注(0)|答案(3)|浏览(107)

我想查询插入日期介于两个日期之间的记录,如下所示:

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中得到了错误的结果,在第三个对象中也显示了上个月的日期。不仅如此,甚至在服务器端的日期格式也不同

oprakyz7

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-connections

qnakjoqk

qnakjoqk2#

我面临着同样的问题,巧合的是,同样的时差(我也来自格林尼治标准时间+05UNK)。
你所要做的就是在建立与数据库的连接时,设置时区,如下所示:

const mysql = require('mysql');
var connection = mysql.createConnection({
    host     : <Your Host>,
    port     : <Your MySQL Port>,
    user     : <Username>,
    password : <Password>,
    database : <Database>,
    timezone : "+00:00"
});

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

tzdcorbm

tzdcorbm3#

添加-〉日期字符串:true,-〉添加到MySQL配置中,将以与数据库相同的格式给予日期:2018-02-01

const mysql = require('mysql');
var connection = mysql.createConnection({
    host: 'host',
    user: 'username',
    password: 'password',
    database: 'database',
    dateStrings: true,
});

输出:“产品_日期”:“2022年12月15日”

相关问题