【问题标题】:Unable to change date format in php [duplicate]无法在php中更改日期格式[重复]
【发布时间】: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

标签: php datetime


【解决方案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.';
    }
?>

【讨论】:

【解决方案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');

【讨论】:

    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 2013-05-24
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多