【问题标题】:Expression Engine SafeCracker Formatting a Date Field format=”%d/%m/%Y” = 01/01/1970表达式引擎 SafeCracker 格式化日期字段格式 =”%d/%m/%Y” = 01/01/1970
【发布时间】:2012-10-09 09:52:07
【问题描述】:

您好,我正在尝试使用 format 属性格式化名为 {member_birthday} 的日期字段。但是每当我将属性应用于标签时,它会以正确的格式显示日期,但日期不正确。

代码:

<input type="text" name="display_birthday" id="display_birthday" value="{member_birthday}" maxlength="23" size="25"/> 

显示正确的日期,即 1982-11-08 12:00 AM

<input type="text" name="display_birthday" id="display_birthday" value="{member_birthday format="%d/%m/%Y"}" maxlength="23" size="25"/>

显示不正确的日期,即 01/01/1970

【问题讨论】:

    标签: php codeigniter expressionengine safecracker


    【解决方案1】:

    看起来member_birthday 是一个字符串(或 DateTime 对象),但要格式化为日期,它必须是一个整数。

    在格式化之前将 member_birthday 转换为整数。如果您可以访问安全的破解代码,请使用strtotime,或者您可以使用模板中的 PHP 可执行块来预解析为变量。但是如果你能做到这些,那么你也可以在没有模板的情况下格式化它们!

    编辑:http://expressionengine.com/wiki/Dates_Explained 推荐:

    始终使用 Localization 函数在 EE 和 Unix 之间进行转换 如果您直接读取或写入数据库时​​间戳,则为时间戳。

    【讨论】:

    • 在 SafeCracker 中编码不会强制所有日期字段类型成为某种格式吗?但是是的,你是对的,我可以在模板中打开 PHP 并使用 PHP 日期函数对其进行操作。我只是在学习 EE,更多的是在寻找 EE 希望您处理这种情况的标准方法。
    • 我不知道安全破解程序,因此无法评论它如何处理日期 - 但如果这是一个“自定义字段”,那么该自定义字段将是一个字符串。
    • 它是来自频道的日期字段。 EE 是否仍将其保存为字符串?
    • 如果是日期字段,文档说你所做的是正确的expressionengine.com/user_guide/modules/channel/… 但这是安全的破解程序,它是用户编写的扩展,并且用户静默扩展的质量通常值得怀疑- 那可能会有所不同?现在,在模板中做一个 var_dump 来检查你持有什么类型。
    • 对于一个可能的菜鸟问题很抱歉,但是您将如何在 EE 标签上执行 var_dump() ? 都给了我错误
    【解决方案2】:

    如果您的 member_birthday 字段确实是本机 EE 日期自定义字段,那么将存储的日期是 UNIX 时间戳,您的代码应该可以工作。

    所以我的猜测是您没有使用本机 EE 日期字段,或者您正在使用,但是在输入数据时以某种方式绕过了适当的验证(因此最终在您的数据库中使用 ISO 样式的日期时间字符串)。

    查看您的数据库(exp_channel_data 表)以了解该字段数据的存储方式。尝试通过控制面板输入日期,看看输入结果如何。

    【讨论】:

    • 在 exp_channel_fields 中,field_type = date,在 exp_channel_data 中,该字段的数据绝对是 UNIX 时间戳。我在后端的字段中输入了我的生日(08/11/1982),然后检查了已更改为 405596816 的数据库,但它仍然显示为 01/01/1970。开始认为这是一个 EE 错误
    • 如果您通过频道条目标签而不是在 SafeCracker 表单中显示相同的字段怎么办?那么格式化是否有效?
    【解决方案3】:

    似乎日期格式功能在安全破解器标签http://devot-ee.com/add-ons/support/zoo-visitor/viewthread/7449#25153中不起作用,所以我安装了这个插件http://devot-ee.com/add-ons/nice-date并使用了这个代码

    {exp:low_nice_date date="{member_birthday}" format="%d/%m/%Y"}
    

    【讨论】:

    • 对于任何阅读本文的人来说,“EE 不允许您访问模板中的日期格式化功能”的说法根本不正确。在 Channel Entries 循环中,任何“日期”字段都将接受并解释“格式”参数。如果没有,那就有别的问题了。
    • 实际上,这证实了问题在于日期是作为字符串发布的,而不是作为日期发布的。如此简洁的解决方案 - 如果你有一个字符串,而不是你手中的日期。
    • 我的字段绝对是EE中的一个日期字段,但是weather or not safeCracker将它作为我不知道的日期传递。这是我发现唯一有效的解决方案。至于我的第一个声明,我删除了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多