【问题标题】:Coldfusion datepicker dd/mm/yyyy but MySQL stay with format yyyy/mm/ddColdfusion datepicker dd/mm/yyyy 但 MySQL 保持格式 yyyy/mm/dd
【发布时间】:2018-03-12 07:21:54
【问题描述】:

Datepicker 是用户轻松选择填写表格日期的选项。在coldfusion中,有一个填写表格需要使用datepicker,在用户选择日期后,填写表格,默认格式为yyyy/mm/dd,MySql可以读取。如果我更改为 dd/mm/yyyy 并单击保存到 MySql 会出错,因为据我所知,MySql 的默认格式是 yyyy/mm/dd。

<input type="text" name="Date_joined" size="auto" style="border:0px"required="yes">

这是弹出日期选择器的功能:

<a href="javascript:showCal('Calendar1')">

这是日期选择器的标志:

<img align="right" src="calendar_menu.gif" alt="Select a date" border="0"></a>

是否有任何解决方案让用户选择一个日期,输入文本会显示日期格式 dd/mm/yyyy 但仍然可以保存到 MySql 中而不会出错。

【问题讨论】:

  • 您需要解析用户输入并为 MySQL 创建一个易于识别的日期格式,例如 yyyy-mm-dd。
  • 另外,最好防止用户手动输入该字段。
  • 使用 ColdFusion 的 parsedatetime() 函数将表单输入(顺便说一下是一个字符串)转换为日期时间对象并将其发送到您的数据库。
  • 如果您尝试通过反复试验来学习 ColdFusion,可能值得您花时间参加课程或在线教程。
  • Learn CF in a Week 是一个很好的在线资源,可以快速了解 ColdFusion。

标签: html coldfusion


【解决方案1】:

如何让 MySQL 接受 DD/MM/YYYY 格式的用户输入,以便记录数据

如果您想以您希望在屏幕上显示的格式保存 代表日期的 字符串 数字和破折号,那么只需将数据库列设置为CHAR(10) 并完成它。

但是,如果您想对它进行计算,请按它聚合数据,用它做事,然后将其保存为日期类型。不必担心您的数据库 UI 如何向您表示该日期值。也许它与您希望它在 HTML 页面上显示的方式不同,没关系。重要的是,作为日期对象,您可以随意使用和显示该值。

据我所知,MySQL 只接受格式为 YYYY/MM/DD 的数据类型日期。

不是这样的。

https://dev.mysql.com/doc/refman/5.7/en/datetime.html DATE 类型用于具有日期部分但没有时间部分的值。 MySQL 以 'YYYY-MM-DD' 格式检索和显示 DATE 值。 > 支持的范围是“1000-01-01”到“9999-12-31”。

看到“检索和显示”(强调我的)吗?它只是一个以“00:00:00”作为时间部分的日期对象。

因此,无论您的表单字段接受日期的字符串表示形式,您都需要将其转换为适当的日期对象。根据 Dan 的建议,您可以轻松地使用 parseDateTime() 来完成此操作。

#writeOutput( parseDateTime( now() ) )# 将输出{ts '2018-03-14 15:29:19'}。

如果您的表单字段包含表示日期的有效字符串(例如2018-03-14):

#writeOutput( parseDateTime( form.myDateField ) )# 将输出{ts '2018-03-14 00:00:00'}。

因此该值将保存为日期对象,没有时间部分。当您稍后读取保存的值时,只需使用dateFormat() 以您喜欢的任何格式显示它。

【讨论】:

【解决方案2】:

(从 cmets 移出以提高知名度)

对Adrian's answer 的一个重要补充。在这种特定情况下,您必须使用带有parseDateTime() 的日期掩码。掩码控制 parseDateTime() 如何解释输入。如果没有正确的掩码,您的特定输入的结果可能是错误的,即dd/mm/yyyy。

TryCF Example

代码:

<cfscript>
    dateString = "05/08/2018";
    writeOutput("<br>Without mask = "& parseDateTime( dateString) );
    writeOutput("<br>With mask = "& parseDateTime( dateString, "dd/MM/yyyy") );
</cfscript>

结果:

Without mask = {ts '2018-05-08 00:00:00'} (May 8, 2018)
With mask = {ts '2018-08-05 00:00:00'} (August 5, 2018)

【讨论】:

    猜你喜欢
    • 2019-10-29
    • 2015-02-11
    • 2016-01-02
    • 1970-01-01
    • 2014-04-30
    • 2013-08-31
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多