PHP 中文日期转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 中文日期转换相关的知识,希望对你有一定的参考价值。

这段代码是我在一个学习网看到的,自己觉得不太对,调试了一下,根本没有输出结果,大家来看一下,到底是不是有问题。。
==================================================
本程序将中文日期输出为2001-12-23,并很好解决了“十”的问题,如“十一”和“二十一”中“十”的处理!稍加修改可改为函数。
<?
$str="二零○一年十二月二十三日";
echo $str."<p>";
$flag=0;
$cn=array("一","二","三","四","五","六","七","八","九","十","零","○");
$num=array("1","2","3","4","5","6","7","8","9","","0","0");
$len=strlen($str);
for ($i=0;$i<$len;$i+=2)

$array_str[$i]=substr($str,$i,2);
$cout=0;
while($cout<count($cn))

if ($array_str[$i]==$cn[$cout])

if ($flag==1)
echo "-";
if (($array_str[$i]=="十") and ($flag==1))

$temp[$cout]="1";
echo $temp[$cout];
$flag=2;break;

$temp[$cout]=$num[$cout];
echo $temp[$cout];
$flag=2;
break;

else

if (count($cn)==$cout+1)
$flag=1;

$cout++;


?>
代码似乎没问题,可是为什么没echo出结果呢?
求解。。。

我不清楚你的程序哪里有错, 因为我这里本地是自动保存utf8的,所以我把
for ($i=0;$i<$len;$i+=2)

$array_str[$i]=substr($str,$i,2);
中的2都自己改成3了, 然后我就看到了2001-12-23

我不知道你那为什么没输出,如果你也是保存成utf8,那你最好考虑下每个汉字在utf8中占3个字节的问题

另外我觉得你应该注意下php的编写习惯, <?在很多服务器上运行不能, 因为短标签可能会被服务器管理员关掉, 尽量<?php
参考技术A 有echo结果啊,我这边的结果是
二零○一年十二月二十三日<p>2001-12-23

并且这代码也太罗嗦了。
<?php
$str="二零○一年十二月二十三日";
echo $str."|";
$cn=array('一','二','三','四','五','六','七','八','九','零', '○','年', '月', '日');
$num=array('1','2','3','4','5','6','7','8','9','0', '0','-', '-', '');
$str = str_replace($cn, $num, $str);
$str = preg_replace(array('/-\xca\xae/', '/(\d)\xca\xae/'), array('-1', '\\1'), $str);
// 如果是UTF-8编码的, 把 \xca\xae换成\xe5\x8d\x81
echo $str;
?>

试试这个

以不同格式PHP转换日期格式[重复]

【中文标题】以不同格式PHP转换日期格式[重复]【英文标题】:Convert Date Format in Different Format PHP [duplicate] 【发布时间】:2021-04-07 05:13:35 【问题描述】:

我是 PHP 新手,正在学习以不同格式转换日期时间 我有这样的约会时间

我的日期输入是这样的

03/12/2020 23:18

我需要的喜欢

 2020-12-03 23:18:00

所以我想试试

$date = date('Y-m-d H:i:s', strtotime($appointment_date));

但它给了我日期

1970-01-01 00:00:00

如果这里有人可以帮助我解决问题,请告诉我。 谢谢!

【问题讨论】:

请显示您的确切代码。 I cannot duplicate the issue @aynber 抱歉,我已经编辑了问题。谢谢! 所以您希望它被解释为 dd/mm/yyyy 而不是 mm/dd/yyyy? PHP 无法知道您使用的是哪种格式。它默认采用 mm/dd/yyyy。顺便说一句,该代码不会产生您声称的输出 - 它产生第 12 场比赛而不是 12 月 3 日 - 3v4l.org/qe5O2。使用 DateTime::createFromFormat 解析日期,然后可以指定传入格式 【参考方案1】:

您可以使用 DateTime 格式方法:

$incoming_date = '12/12/2020 23:18';
$date = DateTime::createFromFormat('d/m/Y H:i:s', $incoming_date . ':00');
$outgoing_date = $date->format('Y-m-d H:i:s');

我大约有 95% 的把握你也可以省略秒数,但我不能在没有测试的情况下肯定地说:

$incoming_date = '12/12/2020 23:18';
$date = DateTime::createFromFormat('d/m/Y H:i', $incoming_date);
$outgoing_date = $date->format('Y-m-d H:i:s');

【讨论】:

以上是关于PHP 中文日期转换的主要内容,如果未能解决你的问题,请参考以下文章

php怎么把中文日期转换成时间戳

如何使用php将日期格式转换为日期时间格式[重复]

PHP日期操作类代码-农历-阳历转换闰年计算天数等

php怎么将指定日期转换为时间戳

php怎么将指定日期转换为时间戳?

php怎么将指定日期转换为时间戳