Javascript到PHP的日期转换在时区中丢失.也许mysql保存问题
javascript to php date conversion lost in timezone. Maybe mysql saving issue?
在Symfony/Angular项目中,我使用日期拾取器(Bootstrap日期拾取器)来选择日期。这给了我一个对象值,然后我想要发送给php进行持久化。
问题是有一个时间偏移给我错误的值在数据库中。
我在法语设置中,我已经在php.ini中定义了正确的时区。
- 在日期选择器中选择:
17/11/2016
翻译成Thu Nov 17 2016 00:00:00 GMT+0100 (CET)
- 但当我发送到php ajax调用:我有
2016-11-16T23:00:00.000Z
php一边 - 然后在我的Db与学说,日期时间字段包含:
2016-11-16 23:00:00
- 当我想要显示保存的值时,它自然会在日期选择器中给出:
16/11/2016
这实际上是如果我做console.log():{"date":"2016-11-16 23:00:00.000000","timezone_type":3,"timezone":"Europe/Paris"}
在这个过程中我没有使用任何转换。我确实尝试过"cast"js: start.toUTCString()
,我也尝试过在php: $start.setTime(0, 0, 0);
中设置时间为0,但没有成功。
那么,如何保存和显示正确的日期呢?
这是我提示:
使用时间戳时,请使用epoch时间戳。epoch时间戳(unix时间戳)从Jan 01st 1970
开始,以秒为单位计算(大多数情况下)。例如今天是(2016年11月16日):
1479307079 seconds since Jan 01 1970. (UTC)
现在你可以将该值保存到数据库或对象中,你可以将其传递给JavaScript或返回给PHP,这取决于该值来自何处。
要显示正确的时间,你可以而且应该使用momentJS,只要你是在JavaScript环境中。
为什么momentJS ?
你不必担心时区,momentJS正在为你做这项工作:
moment().format(); // 2013-02-04T10:35:24-08:00
moment.utc().format(); // 2013-02-04T18:35:24+00:00
您可以将unix时间戳(秒或毫秒)解析为moment对象并使用它们:
let day = moment.unix(1318781876); // will display only the day
你也可以将当前日期转换为epoch时间戳,这样你就可以反过来保存用户输入的值,就像你的日期选择器一样。下面是momentJS的文档。
小心2038年的问题!
2038年问题是计算和数据存储情况下的问题,其中时间值被存储或计算为有符号32位整数,并且该数字被解释为从1970年1月1日00:00:00 UTC("epoch")开始的秒数。[…)
阅读更多:https://en.wikipedia.org/wiki/Year_2038_problem
简而言之:您可以安全地使用epoch时间戳,直到:
19th January 2038 03:14:07 UTC
希望对你有帮助。
问候,Megajin
- 使用jquery将mysql数据获取到新的表行中
- 将地理编码结果转换为php变量以发布到mysql数据库
- 如何使用JS禁用表行,并在MYSQL中插入所选选项
- 从MySQL数据库中获取输入数据需要两次页面刷新
- 将一个表的id与另一个表中的user_id进行匹配,以获取mysql中的记录
- 在php和mysql中选择选项.一旦选择了选项,就列出我的sql数据库数据
- 如何使用PHP将javascript变量添加到mysql数据库中
- 将phonegap图像发布到php/mysql-图像字段从发布请求中消失
- JavaScript上的通配符(也许这不费吹灰之力?)
- 在node.js-mysql中执行UPDATE查询不起作用
- 更新从Mysql查询检索到的数据?Node.js节点mysql
- 单击鼠标,用MySQL数据填充html表单输入字段
- 浓缩一系列mySQL查询
- 如何翻译MySQL查询's ResultSet转换为整数
- 如何在mysql查询(NODE.js)中重复使用一个参数
- Node.JS, Angular.JS, MySql,Express.JS
- Ajax和MySql的插入、检查和检索
- onclick->mysql查询->javascript;同一页
- 在javascript中跳过周六和周日,并向mysql数据库中添加不重复的条目
- Javascript到PHP的日期转换在时区中丢失.也许mysql保存问题