日期/时间值都被强制转换为相同的基本结构,即
DateTime或
DateTimeImmutable对象,因此,仅日期值会自然地加上时间值(
00:00:00),而仅时间值会附带日期(当前日期)
。
CakePHP将根据SQL数据类型使用特定的子类,即
CakeI18nTime
或CakeI18nFrozenTime
为TIME
,TIMESTAMP
和DATETIME
CakeI18nDate
或CakeI18nFrozenDate
为DATE
在早期的CakePHP 3版本中,只有
CakeI18nTime。
如果有一个单独的仅用于时间类型的类,这将是很好的,它会设置适当的仅时间的默认输出格式,但是在添加类似的东西之前,您必须自己照顾输出格式。
在您的视图中格式化如何显示此视图取决于您。您可以轻松使用类实例的
i18nFormat()方法
Time
$record['start_time']->i18nFormat( [IntlDateFormatter::NONE, IntlDateFormatter::SHORT])
或
Time助手,仅显示时间部分
$this->Time->i18nFormat( $record['start_time'], [IntlDateFormatter::NONE, IntlDateFormatter::SHORT])
猜想,如果bake根据列的类型生成类似的代码,那不会有什么坏处,您可能会
建议将其作为增强功能
。如前所述,对于仅时间列使用其他类(或选项)可能也值得考虑。
如果您希望在使用对象的字符串表示形式的任何地方都需要这种行为,而不必手动调用格式化程序,则可以使用带有重写属性的扩展
CakeI18nTime或
CakeI18nFrozenTime类
$_toStringFormat,以便对日期进行相应的格式化。
src / I18n / FrozenTimeOnly.php
namespace AppI18n;use CakeI18nFrozenTime;class FrozenTimeonly extends FrozenTime{ protected static $_toStringFormat = [ IntlDateFormatter::NONE, IntlDateFormatter::SHORT ];}
src / config / bootstrap.php
use CakeDatabaseTypeTimeType;use AppI18nFrozenTimeOnly;TimeType::$dateTimeClass = FrozenTimeOnly::class;// remove the default `useImmutable()` call, you may however// want to keep further calls for formatting and stuffType::build('time'); // ...
现在,这几乎应该是自解释的,
time正在映射到的列
TimeType将
AppI18nFrozenTimeOnly代替默认值使用
CakeI18nTime。
DateTimeType::$dateTimeClass不推荐使用
为了解决这个问题,将需要一个自定义的数据库类型,这也非常简单。
src /数据库/类型/TimeOnlyType.php
namespace AppDatabaseType;use AppI18nFrozenTimeOnly;use CakeDatabaseTypeTimeType;class TimeonlyType extends TimeType{ public function __construct($name) { parent::__construct($name); $this->_setClassName(FrozenTimeOnly::class, DateTimeImmutable::class); }}
应当注意,当前这将实例化数据/时间类两次,因为父构造函数也将调用
_setClassName()该实例,在此实例化给定类的实例。
src / config / bootstrap.php
use AppDatabaseTypeTimeOnlyType;Type::map('time', TimeOnlyType::class);
因此,这将覆盖默认
time类型映射以使用自定义
AppDatabaseTypeTimeOnlyType类,而自定义类将
AppI18nTimeOnly在将数据库值转换为PHP对象时使用该类,当将其转换为字符串时,将使用仅时间格式。也可以看看
- 食谱 >时间>设置默认语言环境和格式字符串
- 食谱 >数据库访问和ORM>数据库基础>添加自定义类型
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)