【问题标题】:php: date conversion to dd-mm-YYYY formatphp: 日期转换为 dd-mm-YYYY 格式
【发布时间】:2011-11-25 10:08:21
【问题描述】:

我正在尝试转换从 Oracle sql 查询中获得的时间戳格式:

19-SEP-11 02.34.51.558459 PM

我需要将它转换成这种格式:dd-mm-YYYY。

$install_date=strtotime($install_date);
$install_date=date("d/m/Y",strtotime($install_date));

但我得到了奇怪的结果......

有什么想法吗?

*** forgot to mention, the field type is TIMESTAMP and not DATETIME

【问题讨论】:

  • 请发布您奇怪的结果,这样我们就不必启动 PHP 解释器并自己做。
  • 您对所使用的查询有任何控制权吗?理想情况下,您应该在日期字段上执行TO_CHAR 以获得您想要的。
  • 它是否也适用于时间戳字段?

标签: php sql oracle date timestamp


【解决方案1】:

当处理strtotime() 无法处理的格式时(请参阅supported date and time formats),或者即使您是,您也可以使用DateTime::createFromFormat()(或者它的程序孪生@987654326)从任何格式创建DateTime 对象@) (docs)。

$install_date = '19-SEP-11 02.34.51.558459 PM';
$datetime     = DateTime::createFromFormat('j-M-y h.i.s.u A', $install_date);
$datetime_dmy = $datetime->format('d/m/Y');

【讨论】:

  • @rfausak 当然。我不支持旧版软件,包括 PHP。
  • @AviLevin 对不起。在几个不同的层面上。
【解决方案2】:

如果它是Oracle中的日期时间字段,您可以使用

TO_CHAR(fieldName, 'DD-MM-YYY')

在您的选择中,它将被格式化为从数据库中出来。

【讨论】:

  • 让 Oracle 完成繁重的工作,因为它在处理数据方面比 PHP 更快。
【解决方案3】:

改为这样做:

$install_date=strtotime($install_date);
$install_date=date("d/m/Y",$install_date);

您已经将$install_date 转换为内部时间,然后您在第二行再次执行此操作。

当然,如果你愿意,你可以把它全部删减成一行:

$install_date=date("d/m/Y",strtotime($install_date));

【讨论】:

  • @halfdan,代码假定与原始帖子相同,即 $install_date 之前已加载。这只是一个代码 sn-p,而不是全部。
  • strtotime() 未正确解析 OP 发布的日期格式
  • 试过了,得到了 1970 年 1 月 1 日,就像 @halfdan 写的那样。
猜你喜欢
  • 2012-05-05
  • 2011-02-09
  • 2017-06-24
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2023-03-15
  • 2022-11-17
  • 1970-01-01
相关资源
最近更新 更多