响应中的日期JSON与数据库中的日期不同

时间:2015-03-16 13:35:41

标签: json sails.js

我有sails.js应用程序。 当我将记录添加到我的MySQL数据库时,有字段createdAt - 类型dateTime。 在MySql控制台中,createdAt值看起来像Wed Mar 25 2015 00:00:00 GMT+0100 当我尝试使用sails.js控制器将此数据作为JSON获取时,我得到了 2015-03-24T23:00:00.000Z - 这是1小时内尔? 我的系统时区是GMT +1。 如何在db和JSON rsponse中获得相同的时间?

   'list': function (req, res, next) {

 Tests.find().exec(function (err, tests) {
   if (err) res.json({ error: 'DB error' }, 500);
   if (tests) {
     _.each(tests, function (data) {
       console.log("Date: " + JSON.stringify(data.createdAt)+"   "+data.createdAt);
     })
     res.status(200).json(tests);
   }
 });

控制台输出是:

 Date: "2015-03-10T14:28:51.000Z"   Tue Mar 10 2015 15:28:51 GMT+0100
Date: "2015-03-16T10:25:34.000Z"   Mon Mar 16 2015 11:25:34 GMT+0100
Date: "2015-03-16T11:27:23.000Z"   Mon Mar 16 2015 12:27:23 GMT+0100
Date: "2015-03-16T11:33:39.000Z"   Mon Mar 16 2015 12:33:39 GMT+0100
Date: "2015-03-16T11:34:41.000Z"   Mon Mar 16 2015 12:34:41 GMT+0100
Date: "2015-03-16T12:13:21.000Z"   Mon Mar 16 2015 13:13:21 GMT+0100
Date: "2015-03-16T13:54:03.000Z"   Mon Mar 16 2015 14:54:03 GMT+0100

转换为JSON时发生的一切 - 仍然不知道如何解决它。

2 个答案:

答案 0 :(得分:1)

JSON.stringify(data.createdAt)等于data.createdAt.toJSON(),等于data.createdAt.toISOString()

data.createdAt等于data.createdAt.toString()

时间价值相等; toString()会根据您的时区返回,而toISOString()则为GMT。

要从JSON字符串使用转换函数获取日期作为JSON.parse()的第二个参数,您可以使用正则表达式rx = /([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})\.([0-9]{3})Z/检查日期ISO格式,然后将其转换为日期d = new Date(str)

答案 1 :(得分:0)

Mysql数据库中createdAt的类型是什么?是日期吗?如果是,请尝试将其设置为varchar。如果您需要操作它或格式化它,您可以使用时刻js。