【问题标题】:How can I extract a date substring from a date+time string in Coldfusion?如何从 Coldfusion 中的日期+时间字符串中提取日期子字符串?
【发布时间】:2014-06-12 21:12:27
【问题描述】:

我是 Coldfusion 的新手。我正在尝试将看起来像“2014 年 6 月 11 日,晚上 8:50”的字符串更改为“2014 年 6 月 11 日”。我尝试使用

<cfset album[currentrow]['date'] = ListGetAt(album[currentrow]['date'], 2, ",")>

它给了我 2014 年。如果我将 2 更改为 1,我会得到 6 月 11 日。有人可以给我一些建议,看看是否有一种方法可以在第二个“,”之前添加所有内容?非常感谢您的帮助。

【问题讨论】:

    标签: coldfusion coldfusion-8


    【解决方案1】:

    弄乱字符串并不难,但是由于您正在处理日期,所以让我们使用日期函数。 如果你有一个字符串,最好的办法是把它转换成一个日期对象,使用

    <cfset myDate = ParseDateTime(string)>
    

    一旦它是一个日期对象,你就可以用它做任何你想做的事情。根据需要使用 Dateformat 对其进行操作。

    <cfoutput>#dateformat(myDate, "mmm dd, yyyy")#</cfoutput>
    

    ParseDateTime documentation here

    DateFormat documentation here

    编辑 - 改为使用字符串。

    您可以使用 LEFT 来获取字符串的左边部分。要知道您想要多少个字符,您需要找到第二个“,”逗号的位置。假设格式一致,第一个逗号应该不超过 8 个字符,所以我们使用 FIND 在字符串中查找“,”,从位置 8 开始。

    <cfset theLoc = find(",", album[currentrow]['date'], 8) >
    

    然后我们使用left函数来获取字符,但是我们不想要逗号,所以我们把它去掉1。

    <cfset theDate = left( album[currentrow]['date'], theLoc- 1 )>
    <cfoutput>#theDate#</cfoutput>
    

    你可以内联,但是有点麻烦

    <cfset theDate = left( album[currentrow]['date'], find(",", album[currentrow]['date'], 8)- 1 )>
    

    【讨论】:

    • 嗨。我刚刚尝试了 ParseDateTime(string) 并收到错误消息:“2014 年 6 月 2 日下午 6:20 是无效的日期或时间字符串。”您对造成这种情况的原因有什么建议吗?
    • 对不起,我以为我以前用过这种类型的日期字符串格式,但我猜它不是它识别的格式之一。我想我们可以求助于字符串操作......我会发布几个选项,等等。
    • 好的,编辑完成。希望有帮助。有很多方法可以给猫剥皮,但是当使用字符串作为日期时,请尝试转换它们,因为这样可以更容易地用它们做任何你想做的事情。在这种情况下,字符串操作还不错,left很简单,这就是我使用的。您可以使用 GetListAt 1 和 GetListAt2 并修剪和组合它们......由您决定。我认为 Left 可读性很强……从长远来看,这很重要。
    【解决方案2】:

    如果你能保证字符串总是由三个逗号分隔的部分组成,并且日期总是前两个,那么你可以这样做:

    dateTimeString = "Jun 2, 2014, 6:20 PM";
    dateString = listDeleteAt(dateTimeString, 3);
    date = parseDateTime(dateString);
    dateFormattedForOutput = dateFormat(date, "mmm d, yyyy");
    

    请注意,您应该只使用dateFormattedForOutput 进行输出;如果您要存储或操作日期,请使用date

    【讨论】:

    • 或者你可以这样做......没有考虑删除一个项目,但这很聪明,特别是如果你之后不保留字符串/列表。
    • 除非我遗漏了什么,否则前两个步骤就足够了。
    • 简单地显示值不太可能是全部要求,因此将其一直转换为日期对象是明智的。从那里,一个使用日期对象[whatever],包括输出格式。我意识到第二步和第四步的值是相同的,但这与其他任何事情一样都是巧合。我在最后一句话中确实谈到了这一点。
    猜你喜欢
    • 2020-08-14
    • 2011-03-31
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多