当前位置:  开发笔记 > 编程语言 > 正文

PHP 6位数日期代码以人类可读的格式显示

如何解决《PHP6位数日期代码以人类可读的格式显示》经验,为你挑选了1个好方法。

我有一组格式如下的日期......

197402
192201
184707

前四位数代表年份,其余两位代表月份.我试图以这种格式输出这些

February 1974
January 1922
July 1847

我试过把它传递给像这样的日期函数......

echo date ('F Y', 197402)

但是每次都给我一个1970年1月,所以我认为我误解了日期功能是如何运作的,任何人都可以帮忙吗?



1> Qirel..:

你得到"1970年1月"作为输出,因为你试图从时间戳 创建一个日期197402,这是从1970年1月1 日起的秒数.如果从那里输出完整的字符串(有秒和诸如此类),你将会看到它是一个有效的时间戳,产生一个实际的日期,但它们都在1970年1月初结束,请看这个在线演示.

YYYYMM格式对于大多数函数来说都不是一种可识别的格式.如果您知道格式将采用这种方式,则需要将其拆分- 并使用该数据.您可以使用substr()分割字符串,然后将数字转换月份与当月相关的字符串,用的帮助date()mktime()(因为您刚才指定的年份和月份).

以下代码段

$arr = [197402, 192201, 184707];

foreach ($arr as $v) {
    $year   = substr($v, 0, 4);
    $month  = substr($v, 4, 2);
    echo date("F Y", mktime(0, 0, 0, $month, 0, $year))."
"; // mktime() produces a valid timestamp based on just month and year // Alternatively, drop mktime() and use strtotime() and create from a standard format, // while specifying a date in the month (which won't matter to the output) // echo date("F Y", strtotime("$month/01/$year"))."
"; }

将输出

1974
年2 月1922 年1月1922年
7月


或者,您可以使用DateTime类(使用起来要简单得多),并使用给定格式创建date_create_from_format()

foreach ($arr as $v) {
    echo date_create_from_format('Yh', $v)->format('F Y')."
"; }

这将生成与上面相同的输出.

参考

http://php.net/substr

http://php.net/mktime

http://php.net/date

http://php.net/datetime.createfromformat

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有