我有一组格式如下的日期......
197402 192201 184707
前四位数代表年份,其余两位代表月份.我试图以这种格式输出这些
February 1974 January 1922 July 1847
我试过把它传递给像这样的日期函数......
echo date ('F Y', 197402)
但是每次都给我一个1970年1月,所以我认为我误解了日期功能是如何运作的,任何人都可以帮忙吗?
你得到"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