首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP 6人类可读格式的数字日期代码显示

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

Stack Overflow用户
提问于 2017-01-23 15:20:30
回答 5查看 1.8K关注 0票数 6

我有一组像这样格式化的日期.

代码语言:javascript
复制
197402
192201
184707

前四位数代表年份,其余两位数代表月份。我正在尝试以这种格式输出这些

代码语言:javascript
复制
February 1974
January 1922
July 1847

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

代码语言:javascript
复制
echo date ('F Y', 197402)

但是这每次都给了我1970年1月的,所以我想我误解了日期函数是如何工作的,有人能帮上忙吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-01-23 15:28:44

我使用DateTime类,您可以根据特定的格式创建,然后输出到另一个格式。

正如下面的注释所指出的,您还需要将日期设置为月份的第一天,否则,如果当前一天大于给定月份的天数,则会得到不希望的结果。

代码语言:javascript
复制
echo DateTime::createFromFormat('Ymd', 19470201)->format('F Y');
票数 4
EN

Stack Overflow用户

发布于 2017-01-23 15:28:15

您将获得“1970年1月”作为输出,因为您试图从时间戳197402中创建一个日期,即从1970年1月1日开始的秒。如果从其中输出完整的字符串(包括秒和诸如此类的内容),您将看到它是一个有效的时间戳,生成一个实际的日期,但它们都在1970年1月初结束,请参见此在线演示

这种格式,YYYYMM,对大多数函数来说不是一个可识别的格式。如果你知道格式会是这样的话,你需要把它分开,然后使用这些数据。您可以使用substr()拆分字符串,然后在date()mktime()的帮助下,将数字月份转换为与该月份关联的字符串(因为您只指定了年份和月份)。

下面的片段

代码语言:javascript
复制
$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))."<br />"; // 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"))."<br />";
}

威尔输出

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

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

代码语言:javascript
复制
foreach ($arr as $v) {
    echo date_create_from_format('Yh', $v)->format('F Y')."<br />";
}

这将产生与上面相同的输出。

参考文献

  • http://php.net/substr
  • http://php.net/mktime
  • http://php.net/date
  • http://php.net/datetime.createfromformat
票数 5
EN

Stack Overflow用户

发布于 2017-01-23 15:28:22

当您传递一个int到目前为止,它正在考虑它作为一个Unix时间戳。若要从预定义格式创建日期对象,请使用DateTime::createFromFormat

echo DateTime::createFromFormat('Ym',198403)->format('F Y');

March 1984的结果

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41809691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档