我有一组像这样格式化的日期.
197402
192201
184707前四位数代表年份,其余两位数代表月份。我正在尝试以这种格式输出这些
February 1974
January 1922
July 1847我试过把它传递给这样的日期函数.
echo date ('F Y', 197402)但是这每次都给了我1970年1月的,所以我想我误解了日期函数是如何工作的,有人能帮上忙吗?
发布于 2017-01-23 15:28:44
我使用DateTime类,您可以根据特定的格式创建,然后输出到另一个格式。
正如下面的注释所指出的,您还需要将日期设置为月份的第一天,否则,如果当前一天大于给定月份的天数,则会得到不希望的结果。
echo DateTime::createFromFormat('Ymd', 19470201)->format('F Y');发布于 2017-01-23 15:28:15
您将获得“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))."<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()从给定的格式创建
foreach ($arr as $v) {
echo date_create_from_format('Yh', $v)->format('F Y')."<br />";
}这将产生与上面相同的输出。
参考文献
发布于 2017-01-23 15:28:22
当您传递一个int到目前为止,它正在考虑它作为一个Unix时间戳。若要从预定义格式创建日期对象,请使用DateTime::createFromFormat。
echo DateTime::createFromFormat('Ym',198403)->format('F Y');
March 1984的结果
https://stackoverflow.com/questions/41809691
复制相似问题