无法在php中更改日期格式[重复]
Posted
技术标签:
【中文标题】无法在php中更改日期格式[重复]【英文标题】:Unable to change date format in php [duplicate] 【发布时间】:2015-03-30 16:07:05 【问题描述】:我尝试在 php 中将日期“31/01/2015 11:33:22 AM”更改为“2015-01-31 11:33:22”
我试过了
echo strtotime('31/01/2015 11:33:22 AM');
但是它会抛出错误..任何想法。请分享
错误信息
警告:strtotime() [function.strtotime]:依赖系统的时区设置是不安全的。您需要使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种,但仍然收到此警告,您很可能拼错了时区标识符。我们在第 2 行为 'EST/-5.0/no DST' 选择了 'America/New_York'
【问题讨论】:
在strtotime()
函数之前使用date_default_timezone_set('America/New_York');
,Same Question here
【参考方案1】:
首先,你应该设置你的时区,就像警告已经告诉你的那样:
date_default_timezone_set('America/Los_Angeles');
然后,您应该查看the manual,在Localized Notations
下,您会看到,php 将31/01/2015
解析为American month, day and year
(格式为m/d/Y
,而不是您的d/m/Y
假设)。见demo。
您的日期格式是自定义的,您应该将其视为一种。将格式转换为/
到.
,因此输出日期将为31.01.2015
,php 将其理解为d.m.Y
格式。见demo。
恕我直言,打赌是使用DateTime::createFromFormat()
,只需告诉方法您希望输入什么,如下所示:
$date = DateTime::createFromFormat('d/m/Y g:i:s A', $input);
echo $date->format('Y-m-d H:i:s');
demo
【讨论】:
您的演示无法正常工作。 @St3phan:你能告诉我们你的$input
吗?【参考方案2】:
把它放在你的 strtotime 函数之前:
date_default_timezone_set('America/New_York')
这是一个来自 PHP.net 的示例:
<?php
date_default_timezone_set('America/Los_Angeles');
$script_tz = date_default_timezone_get();
if (strcmp($script_tz, ini_get('date.timezone')))
echo 'Script timezone differs from ini-set timezone.';
else
echo 'Script timezone and ini-set timezone match.';
?>
【讨论】:
127.0.0.1/test.php?process_time=31%2F01%2F2015+12%3A46%3A56+AM 这里是我的代码 date_default_timezone_set('America/Los_Angeles'); echo $process_time = date('Y-m-d H:i:s',strtotime(urldecode($_REQUEST['process_time'])));但不打印【参考方案3】:试试这个
$dt = "02/09/2015 11:33:22 AM";
$expDate = explode('/',$dt);
$newdate = $expDate[1]."/".$expDate[0]."/".$expDate[2];
$test = new DateTime($newdate);
echo date_format($test, 'Y-m-d H:i:s');
【讨论】:
以上是关于无法在php中更改日期格式[重复]的主要内容,如果未能解决你的问题,请参考以下文章