将数据库日期字符串转换为HTML日期输入格式的指南

前两天调试预订系统时,发现日期控件根本没有被选中。
用户直接输入的“2 02 3 -05 -1 6 ”变成了“2 02 3 -1 3 -2 5 ”,这让我很困惑。
后来我想起来,我没有将数据库中的字符串转换为HTML可以识别的格式。

让我们看看,浏览器在解析字符串“TueMay1 6 2 02 3 1 5 :4 0:00GMT+02 00”时出现问题。
那天我在咖啡厅摆弄电脑,尝试了很长时间,我终于意识到我必须使用 Date 对象来将其分层。

开始新的一天并输入字符串。
例如: const inputDate = new Date("TueMay1 6 2 02 3 1 5 :4 0:00GMT+02 00");这样就可以得到一个Date对象。
然后直接从 getFullYear() 获取年份。
请注意,getMonth() 从 0 开始计算月份,因此必须先加 1 ,然后填零。

记得那天我在星巴克兑换代码时,不小心把月份写成了month.toString().padStart(1 ,"0"),结果是“2 02 3 -5 -1 6 ”,少了一个零。
真正造成差异的是小事情,即使是零也可能会卡住很长一段时间。

最烦人的是时区问题。
我在东南亚有一个项目。
如果用户使用Date.parse直接输入“2 02 3 -05 -1 6 1 0:00+08 00”,结果将变为“2 02 3 -05 -1 5 ”,因为浏览器默认使用本地时区。
那天换酒店的时候,我连续调整了3 次时区参数才算对了。

等等,还有一件事。
我发现 getHours() 和 getMinutes() 也不总是可靠的。
客户端使用的是旧版IE浏览器,这些方法将直接返回null。
最后,我不得不使用 Date.getHours() 和 Date.getMinutes(),尽管这样写起来有点麻烦。

我发现现在使用第三方库实际上更容易了。
那天在地铁上我想如果我使用date-fns-tz,只需要一个格式函数就可以解决时区问题。
不过想想,客户的旧笔记本根本装不下那些包,所以还是得自己写。

现在想来,最重要的是验证日期的有效性。
下个月“2 02 3 -02 -3 1 ”的测试数据存在实时错误。
然后添加了 if(inputDate.getTime() === NaN) 检查。

说到这里,为什么 HTML 日期输入仅限于 YYYY-MM-DD 格式?它应该与那些旧浏览器兼容。
Chrome 现在支持 ISO 8 6 01 ,但 IE1 1 仍受旧规定的约束。

唉,时间过去了,已经是晚上十点了。
明天我还要继续和这些糟糕的日子作斗争。

oracle里有date类型吗

这是一个陷阱,不要相信日期格式的自动识别。

实用提醒:使用to_date()函数要确保日期格式与Oracle识别的格式完全匹配。

数据库里日期怎么表示

记得去年在杭州做活动的时候,系统日出现了问题。
订单日期显示为2 02 3 年,这相当可怕。
检查了半天,还是发现是MySQL默认的TIMESTAMP字段范围1 9 7 0-2 03 8 的问题。
还好及时改成DATETIME,不然客户投诉信已经写满世界了。

数据库中的日期类型很烦人。
例如,DATE 严格地仅存储年、月和日,这对于出生记录来说没问题,但如果它存储事件的最后时间,则小时和分钟就不够了。
TIMESTAMP 的自动时区转换看起来很方便,但是上次使用 PostgreSQL 的 TIMESTAMPTZ 的结果是系统时区设置不正确,占用的时间完全乱了。

还有一个神谕。
日期格式为 DD-MON-RR。
一次思考需要三思而后行。
然而,使用 TO_CHAR() 在转换为正常格式后可以节省很多压力。
等等,好像还有别的事。
使用 Unix 时间戳秒来存储时间戳很有趣。
它们是纯数字,并且在通过系统时特别稳定。

我突然想到,即使没有 TIMESTAMP,如果有一个可以根据用户时区调整显示时间的数据库就好了。
谁不带自己的手机时区呢?