【问题标题】:How to convert YYYY-DD-MM hh:mm:ss to YYYY-MM-DD hh:mm:ss? [duplicate]如何将 YYYY-DD-MM hh:mm:ss 转换为 YYYY-MM-DD hh:mm:ss? [复制]
【发布时间】:2012-03-26 23:00:43
【问题描述】:

可能重复:
How to convert yyyy-MM-dd HH:mm:ss to “15th Apr 2010” using PHP

我已经连接到一家银行,它给我一份 YYYY-DD-MM hh:mm:ss 格式的报告,但我需要这种格式 YYYY-MM-DD hh:mm:ss 来存储在 db 中,什么可以我现在用 php 做?

【问题讨论】:

  • 哪个银行将日期表示为 YYYY-DD-MM?我以前从未见过这种特定格式——而且由于它与 ISO 8601 格式不明确,我觉得这是一个非常坏主意。
  • libertyreserve.com ,如何向 iso 8601 报告
  • 我不知道如何让银行给你 YYYY-MM-DD。你可以考虑联系他们。从 YYYY-DD-MM 转换为 YYYY-MM-DD 很容易,但您无法可靠地确定您首先拥有的是哪一个。

标签: php date format


【解决方案1】:

一种方法是使用 DateTime 类:

<?php
$date = \DateTime::createFromFormat('Y-d-m H:i:s', $yourDateString);

if (! $date) {
    throw new \InvalidArgumentException(sprintf("'%s' is not a valid date.", $yourDateString));
}

echo $date->format('Y-m-d H:i:s');
?>

【讨论】:

  • 请注意,格式值应为:'Y-d-m H:i:s' 和 'Y-m-d H:i:s' 相应地在这里
  • 它返回错误:在第 5 行调用 C:\xampp\htdocs\headortailcasino.com\test.php 中非对象的成员函数 format()
  • 那是因为格式错误,或者输入错误并且没有创建对象... DateTime::createFromFormat 成功返回 DateTime 对象,失败返回 false
  • 可能没有安装/启用 DateTime 扩展。您的日期格式也很差,请查看手册:php.net/manual/en/function.date.php
【解决方案2】:
 <?php
     $date = date("Y-m-d H:m:s");
     $query = "INSERT into table_name ('date') VALUES ('$date')";
     $result = mysql_query($query);
 ?>

在您的数据库中,确保您需要以该格式设置日期类型,尝试 TIMESTAMP

【讨论】:

  • 除其他外,这不是 PHP 的有效日期格式。 Check it out for yourself,好笑:2012201220122012-MonMon-MarMar 1111:0303:5959 另一个答案犯了同样的错误。
  • 是的,我知道,因为 Y 单独表示全年,php.net/date,我想做的只是与问题相关联,提出问题的人只是强调YYYY-DD 等等 Mr. Know it All。
  • 我也已经为你编辑了,Mr. Know It All,哦,也谢谢你说这很有趣,我认识你的老手,但也许我也知道这不是提供建议的正确方式Mr. Know It All,也许你应该把你的名字 Madmartigan 改成 Mr. Know It All,挑一些菜鸟吧?
  • 我无意伤害 SuperNoob 先生。你不觉得输出很有趣吗?另外,你为什么要做一个数据库插入只是为了转换一个日期?这没有意义。这就是我投反对票的原因,这与个人无关 - 我们都在这里学习。
  • 哦,对不起,MadMartigan 先生,也许我应该把问题放在这里吧? “我已经连接到一家银行,它给了我一份 YYYY-DD-MM hh:mm:ss 格式的报告,但我需要这种格式 YYYY-MM-DD hh:mm:ss 来存储在 db 中,我该怎么办现在在 php 中?”还有为什么我要做一个数据库插入只是为了转换一个日期?什么?!
【解决方案3】:

另一种方式:您可以使用正则表达式替换:

$out = preg_replace("/^([0-9]{4})-([0-9]{2})-([0-9]{2})/", "$1-$3-$2", $in);

【讨论】:

  • 我没有 -1 因为它有效。虽然他可以这样做,但这并不意味着他应该这样做。
  • 否决票可能是因为您的代码无论如何都不会验证日期。相比之下,另一个答案仅适用于有效日期并且更具可读性(因为它明确显示了格式前后)
  • 这段代码效果很好,我投票+1
  • @Guvante:作者没有说任何关于验证的内容;)相反,如果输入有缺陷,则 DateTime 示例将被削弱,而这个示例只会重写字符串...
  • @AMINGholibeigian:如果您将格式值更改为 PHP 使用的格式值(请参阅link,则使用 DateTime 的示例也可以使用
猜你喜欢
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
相关资源
最近更新 更多