【问题标题】:need help formating type="datetime-local" in ColdFusion (not a cold fusion element)需要帮助在 ColdFusion 中格式化 type="datetime-local"(不是冷融合元素)
【发布时间】:2020-06-29 15:05:06
【问题描述】:

好的,我已经搜索了 2 天,并认为我找到了解决方案,但它不起作用,也许我可以在这里帮忙。

我试图让用户选择他们的表单发布的日期时间。我找到了实现这一点的 type="datetime-local" (尽管它没有被浏览器广泛支持,但它似乎仍然适用于我的目的。)

表单元素:

<input name="PostDate" type="datetime-local"(我们使用的 CF 版本已弃用 cfcalendar)

我的cfform 方法是“post”,我的操作是“submit.cfm”

当我们到达 submit.cfm 页面时,我使用以下 CF 代码来格式化日期以进入 MSSQL 数据库:

<cfset PostDate=Replace(PostDate,"T"," ","All")><br>
<cfset PostDate = DateTimeFormat (PostDate, "yyyy-MM-dd HH:nn:ss")>

输出显示日期格式正确:

但是...当我尝试将日期插入数据库时​​,似乎格式化的日期未保存在 #PostDate# 变量中(此错误是由 MSSQL 数据库服务器引发的:


为了信息的完整性,这是数据库中表的设置方式:


这是 submit.cfm 的代码


<cfmodule template="customTags/front.cfm" >
<cfoutput>
    <p>Date before format: #PostDate#</p>
</cfoutput>
<cfset PostDate=Replace(PostDate,"T"," ","All")>
<cfset PostDate = DateTimeFormat (PostDate, "yyyy-MM-dd HH:nn:ss")>
<br>
<cfoutput>
    <p>Title: #PostTitle#</p> 
    <p>Date after format: #PostDate#</p>
    <p>Author ID: #UserID#</p>
    <p>Category ID: #CategoryID#</p>
    <p>Post Text: #Post#</p>
</cfoutput>
<hr>
<!--- Insert the new record --->
<cfinsert datasource="Intranet" tablename="TBL_POST">
<h1>Post Added</h1>
<cfoutput> You have added #Form.PostTitle#.</cfoutput>  
</cfmodule>

作为这个问题的最后一个资格,我需要说我是 ColdFusion 的绝对初学者(我们的州机构使用它),自从我编写 HTML 表单以来已经十多年了。

感谢我能得到的所有帮助。

【问题讨论】:

  • ISO 8601 日期时间字符串格式应为“2020-06-29T09:57:00”(您缺少秒数规范)。参数化 SQL 查询不会有这个问题,但我不知道 Cold Fusion 可以建议如何做到这一点。
  • 哦,我明白你在说什么。我得再挖一些。谢谢
  • 您的问题是使用cfinsert。不要使用它。了解如何编写 SQL 来执行插入,然后查看 cfqueryparam,您可以在其中告诉 JDBC 驱动程序您正在传递什么样的数据(字符串、日期、浮点数等)。另外,停止使用cfform 并为您的表单使用标准的 HTML 控件。
  • 如果您坚持使用cfinsert,请确保您了解它的工作原理。它使用form 范围内的变量。您的格式化工作不一定会更改表单变量。他们可能正在变量范围内创建一个具有相同名称的新变量。要验证这一点,请在两个 cfset 命令之后运行 &lt;cfdump var = "#form#" abort = "true"&gt;
  • 谢谢大家 我会做更多关于如何在 CF 中使用 SQL 而不是依赖于 的研究,我会考虑在不使用 /跨度>

标签: sql-server date datepicker coldfusion date-formatting


【解决方案1】:

感谢 Dan Bracuk,我能够找到解决此问题的方法:

我需要在 PostDate 前面加上 - form。 像这样:

<cfset form.PostDate=Replace(form.PostDate,"T"," ","All")><br> 
<cfset form.PostDate = DateTimeFormat (form.PostDate, "yyyy-MM-dd HH:nn:ss")>

原因是cfinput处理表单范围内的变量,而原来的cfset命令在变量范围内创建了一个变量。

【讨论】:

    【解决方案2】:

    在 postgresql 数据库中使用“yourtime”:

    value="#DateTimeFormat(yourtime, 'yyyy-MM-dd')#T#DateTimeFormat(yourtime, 'HH:nn:ss')#"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多