我正在用rails + mysql编写一个后端程序,试图检索一个"日期";在我的前端输入column
sql = <<-SQL
SELECT ...............,
DATE_FORMAT(sd.date_agreed,'%Y-%m-%d') as date_agreed,
DATE_FORMAT(sd.date_agreed,'%Y-%m-%d') as date_agrd,
..........
FROM shipping_demurrages sd
WHERE ......
SQL
The "date_agreed"one_answers";date_agrd"应该完全一样,但是我的前端收到了不同的数据:
date_agrd: "2022-12-20"
date_agreed: "2022-12-20 00:00:00 -0600"
实际上,除了"date_agreed"会给出一个日期结果,比如& 222-12-20 ",但是如果我给出&;date_agreed"作为名称,结果将是date+time我的问题是:
- 为什么不同的别名会导致不同的结果?
- date_agreed列已经是一个日期类型,但是如果我不做DATE_FORMAT的事情,我的前端将始终接收一个日期时间,如"2022-12-20 00:00:00 -0600";但不是我期待的约会。为什么呢?
BTW,我的后端是Rails 4.2.6,mysql Ver 15.1 Distrib 5.5.33-MariaDB, for Linux (x86_64) using readline 5.1
我的前端是EXTJS 6.2在chrome浏览器中运行。我使用chrome开发人员工具来监控从后端发送的数据。
date_agreed列已经是一个日期类型,但是如果我不做DATE_FORMAT的东西,我的前端将始终接收一个日期时间,如2012-12-20 00:00:00 -0600;但不是我期待的约会。为什么了吗?
因为你做错了。
如果你正在编写一个服务于前端的API,你不应该依赖于隐式地将日期或时间转换为字符串。相反,您应该EXPLICITY以标准化格式(如ISO8601)输出日期。否则,当你更新应用程序时,它一定会崩溃。
这消除了执行不稳定的数据库查询的全部需要。我猜问题不是这么多的别名,但你可能有一个列与定义的同名,这是导致ActiveRecord将值转换为DateTime,然后被转储--6 h
最有可能是由于您的时区设置。
你可以添加一个序列化层,比如ActiveModel::Serializers或jBuilder,或者创建一个装饰器。