Php Silverstripe currentUser()->;日期格式

Php Silverstripe currentUser()->;日期格式,php,silverstripe,Php,Silverstripe,我想知道如何使用Member::currentUser()->DateFormat将模型中的日期格式化为字符串。我的用例位于GridField列中,前面有对象标题: 返回$this->Title。“(“$this->Date.”) 我希望GridField字符串使用CMS用户选择的日期格式 我试过: 返回$this->Title。“(“.date(成员::currentUser()->DateFormat,$this->date)。” 但由于CMS以不同于PHP日期格式的格式存储用户日期,因此它

我想知道如何使用Member::currentUser()->DateFormat将模型中的日期格式化为字符串。我的用例位于GridField列中,前面有对象标题:

返回$this->Title。“(“$this->Date.”)

我希望GridField字符串使用CMS用户选择的日期格式

我试过:

返回$this->Title。“(“.date(成员::currentUser()->DateFormat,$this->date)。”


但由于CMS以不同于PHP日期格式的格式存储用户日期,因此它会返回一些不可靠的结果。

确保$this->date是一个时间戳值,而不是格式化的日期/日期时间值。

日期上有一个helper方法,正是出于这个目的

如果您的数据对象有一个名为
Date
的字段,则可以使用类似的方法将日期格式化为字符串(基于当前成员设置):

在模板中,您应该能够使用:

$Date.FormatFromSettings
如果您只想在GridField中格式化日期,那么指定DataObject的
摘要\u字段就足够了,例如:

private static $summary_fields = [
    'Title' => 'Title',
    'Date.FormatFromSettings' => 'Date'
];

在CMS上下文中使用它不是问题。在使用前端代码时,必须考虑没有登录成员的情况。在这些情况下,
FormatFromSettings
将返回
false
…因此您可能必须为日期编写自己的getter,当有人登录时,它将返回用户格式化的日期,以及其他情况下的备用格式。

我尝试了“Date”和“SS_Datetime”数据类型,得到了相同的结果!FormatFromSettings()正是我所需要的。我无法使用summary_fields方法,因为我需要在标题前加上前缀,但这非常有效。有没有方法可以使用时间数据类型进行此操作?@Chris您可以在
SS_Datetime
中查看
FormatFromSettings
实现,我想你必须从中提取出只对时间进行格式化的部分。从中看,似乎会有点混乱。除非你知道干净利落的方法。否则,将FormatFromSettings添加到时间数据类型是否值得PR?这就是我在此期间所做的,我将组合一个PR,将FormatFromSettings()添加到时间数据类型。谢谢你,伙计!
private static $summary_fields = [
    'Title' => 'Title',
    'Date.FormatFromSettings' => 'Date'
];