Yii2的Formatter详解 [ 技术分享 ]
某某某 5秒钟前发布了帖子,诸如此类的功能其实你不用自己写。 Yii2的Formatter就是干这个事情的,它提供了一组格式化输出的方法,都是用asXyz一样的函数。
使用更加方便,直接用Yii::$app->formatter->asXyz(input) 就完事了。
下面把Formatter的用法和主要方法小说一下。
Yii::$app->formatter->asRelativeTime($value, $referenceTime = null)
该方法可以实现几秒前、几小时前、几天前这样的时间格式。 函数包含两个参数,第一个是要被格式化的时间,第二个是相对时间(默认为now()) $value可以是时间戳或一种时间对象 $referenceTime是时间戳
Yii::$app->formatter->asDuration($value, $implodeString = ', ', $negativeSign = '-')
这个方法也比较常用,用来将一个数字格式化为年、天、小时、分、秒等。比如一个活动距离今天还有多久开始等等。 倒计时常用
Yii::$app->formatter->asText($value);
将字符串中html标签当做字符串输出,主要解决的是<>标签在浏览器显示时候会被解析的问题。这个一般在页面需要输出源代码的时候非常有用。
Yii::$app->formatter->asNtext($value)
在字符串中遇到\n可以将它作为换行符<br/>实现,单它和nl2br还是不同的,除了转化换行符后,还会将<>标签进行解析,即同时执行了asText的功能。
Yii::$app->formatter->asParagraphs($value)
将转换成HTML编码的文本段落,即用p标签对其进行包裹。
Yii::$app->formatter->asPercent($value, $decimals)
将一个小数$value变成%格式,其中的$decimals代表保留小数点后几位,默认为0位。 要注意的是,当$value 格式化后小数点位数大于$decimals的值时,采取四舍五入法,若$value 格式化后小数点位数小于$decimals的值时,用0补齐。
Yii::$app->formatter->asScientific($value, $decimals = null, $options = [], $textOptions = [])
将数值$value科学计数法,$decimals代表小数点后几位数字。
Yii::$app->formatter->asShortSize($value, $decimals = null, $options = [], $textOptions = []);
将byte格式化为xxxkb和xxxmb格式。计算一些文件尺寸的时候用到。
Yii::$app->formatter->asBoolean()
该函数对参数进行真假格式化,返回Yes或No,如果你的APP设置了语言项,则返回对应语言里标识Yes和No的值,例如中文会返回“是”或“否” 注意:true、不等于0的数字(含负数)、字母都被理解为真,false和0被理解为假,当我们传入NULL时候,函数理解为未设置。
Yii::$app->formatter->asCurrency( $value, $currency = null, $options = [], $textOptions = [] )
将参数进行货币格式化 ,我们要知道的是前两个参数,第一个参数代表具体金额,第二个代表货币符号,其中第二个参数$currency采用IOS 4217国际标准化标准,用3个字母表示,这里北哥简单列举几个
- 人民币 China Yuan renminbi (CNY)
- 港元 hong kong dollar (HKD)
- 台币 Taiwan dollar (TWD)
- 欧元 euro (EUR)
- 美元 US dollar (USD)
- 英镑 Great British Pound(GBP)
- 日元 Japanese Yen (JPY)
更多关于IOS 4217 可以看这里 https://zh.wikipedia.org/wiki/ISO_4217
问:如果$currency没有被配置那?
答:程序会搜索 Formatter的locale属性,根据locale值将其本地化,但是你必须安装PHP intl extension才可以,否则无效,如果你很倒霉也没有安装这个扩展,程序会自动查询配置文件中的language属性,根据其将其货币本地化。
共 4 条回复
-
martin_guo 回复于 2017-03-22 11:10 举报
感谢北哥分享,很有用
-
tangxiaofu 回复于 2017-06-04 20:37 举报
66666
abei1982 河南洛阳
最后登录:2020-04-14
在线时长:128小时48分
- 粉丝307
- 金钱4935
- 威望50
- 积分6715