Silverstripe currentUser()->DateFormat

Silverstripe currentUser()->DateFormat

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

return $this->Title . " (" . $this->Date . ")";

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

我试过:

return $this->Title . " (" . date(Member::currentUser()->DateFormat, $this->Date) . ")";

但是因为 CMS 以不同于 PHP 的日期格式存储用户日期,所以它 returns 一些不稳定的结果。

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

Date 上有一个辅助方法,正是为了这个目的,Date->FormatFromSettings

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

$this->dbObject('Date')->FormatFromSettings()

在模板中,您应该可以使用:

$Date.FormatFromSettings

如果您只想在 GridField 中格式化日期,指定 DataObject 的 summary_fields 可能就足够了,例如:

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

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