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 用户登录时的用户格式日期,以及其他情况的后备格式。
我想知道如何使用 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 用户登录时的用户格式日期,以及其他情况的后备格式。