在PHP中将api返回日期时间字符串从24格式转换为12小时格式

我的日期时间如下</ p>

  17/05 /  2018 23:59:00 PM 
</ code> </ pre>

它存储在数据库中,如varchar(100)。
我想将其转换为17/05/2018 11:59 下午00点。
它正在从api返回。我试图修复尝试了很多方法。
somehow它正在工作,但明天就会像现在这样给出这样的</ p>

18 / 05/2018 11:59 AM </ p>

。这是一种有效的方法。</ p>

  $ startdate = '17 / 05 /  2018 23:59:00 PM'; 
$ myDateTime = DateTime :: createFromFormat('d / m / YH:i A',$ startdate);
$ newDateString = $ myDateTime-&gt; format('d / m / Y h:我是');
echo $ newDateString;
</ code> </ pre>
</ div>

展开原文

原文

I have a datetime like below

17/05/2018 23:59:00 PM

It is storing in database like varchar(100). I want to convert this as 17/05/2018 11:59:00 PM. It is returning from the api.I have tried to fix tried so many ways. somehow it is working but coming tomorrow date like it is giving now like this

18/05/2018 11:59 AM

.Is any efficient way to do this.

 $startdate='17/05/2018 23:59:00 PM';
$myDateTime = DateTime::createFromFormat('d/m/Y H:i A',$startdate);
$newDateString = $myDateTime->format('d/m/Y h:i A');
echo $newDateString;

dongzhong2018
dongzhong2018 实际上,当我删除最后一个字符AM并尝试将日期时间转换为12小时格式时,它是空的Y我不明白。
大约 2 年之前 回复
dongpa6867
dongpa6867 我希望24小时格式到12小时格式。这是我的问题
大约 2 年之前 回复
dtkf64283
dtkf64283 为什么首先将数据库中的日期存储在varchar中?在那里获取日期模型
大约 2 年之前 回复
dso15221
dso15221 如果我添加了d/m/YH:i:sA没有任何改变
大约 2 年之前 回复
doulu4316
doulu4316 你忘了考虑秒数d/m/YH:i:sA.
大约 2 年之前 回复

2个回答



您正在使用AM / PM和24小时格式。 这没有意义。 PHP可能正在尽力理解它,并将日期时间增加12小时,将其推迟到第二天。 </ p>

如果您忽略日期时间的PM,这可以正常工作:</ p>

  $ startdate = '17 / 05/2018 23:59  :00 PM'; 
$ myDateTime = DateTime :: createFromFormat('d / m / YH:i:s +',$ startdate);
$ newDateString = $ myDateTime-&gt; format('d / m / Y h :i:s A');
echo $ newDateString;
</ code> </ pre>

演示 </ p>
</ div>

展开原文

原文

You are using AM/PM and 24 hour format. That doesn't make sense. PHP is probably trying its best to make sense of it and adding 12 hours to the datetime pushing it to the next day.

If you ignore the PM from your datetime this works just fine:

$startdate='17/05/2018 23:59:00 PM';
$myDateTime = DateTime::createFromFormat('d/m/Y H:i:s+',$startdate);
$newDateString = $myDateTime->format('d/m/Y h:i:s A');
echo $newDateString;

Demo

dougou2937
dougou2937 谢谢你的帮助。现在我解决了我的问题。
大约 2 年之前 回复
douqie1816
douqie1816 这解决了你的问题吗?
大约 2 年之前 回复
dongtang1997
dongtang1997 更新了我处理AM / PM问题的答案
大约 2 年之前 回复
dqm74406
dqm74406 它只是一个字符串,因此您可以使用任何您想要的方式删除最后三个字符。 substr(),rtrim()等
大约 2 年之前 回复
dongyan1899
dongyan1899 我的日期时间来自api,当使用var_dump它给字符串22我怎么能改变它来工作它
大约 2 年之前 回复



我会将时间戳保存为dB而不是实际日期</ p>

  $  startDateTime = DateTime :: createFromFormat('d / m / YH:i:s','17/05/2018 23:59:00'); 
$ timeStamp = $ startDateTime-&gt; getTimeStamp();
\ n $ date = new DateTime();
$ date-&gt; setTimestamp($ timeStamp);

echo $ date-&gt; format('d / m / Y h:i:s A');
</ code> </ pre>
</ div>

展开原文

原文

I would save the timestamp to the dB rather than the actual date

$startDateTime = DateTime::createFromFormat('d/m/Y H:i:s', '17/05/2018 23:59:00');
$timeStamp = $startDateTime->getTimeStamp();

$date = new DateTime();
$date->setTimestamp($timeStamp);

echo $date->format('d/m/Y h:i:s A');

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问