【问题标题】:Convert timestamp to date in php在php中将时间戳转换为日期
【发布时间】:2012-10-05 09:02:10
【问题描述】:

我有 timestamp 数据类型的 oracle 数据库字段。我想将 cakephp 控制器中的这个值转换为日期格式,它不能正常工作,它显示 1969 年。

28-NOV-07 11.49.55.000000 AM这是在找到数据库后出现的,我想将其转换为28.11.07 11:49:55.000

【问题讨论】:

  • 你试过date_parse吗?
  • 或者只是strtotime()
  • 是的,我尝试了这两个功能,但没有任何效果。
  • 是否可以使用 oracle db 函数以所需格式从 db 中获取时间戳?
  • @SergeyP.akaazure,实际上我不知道如何在 cakephp 查找条件中获取所需的格式。

标签: php oracle11g cakephp-1.3


【解决方案1】:

你可以试试这样的:

$timestamp = "28-NOV-07 11.49.55.000000 AM";
$date = DateTime::createFromFormat( 'd-M-y h.i.s.u A', $timestamp );

获得日期后,只需以所需格式创建一个新的。

虽然我还没有测试过,但是类似的东西应该可以工作。

【讨论】:

  • 感谢您的回复。我在控制器中测试了此代码,但它显示空白页面。没有发生错误。请帮助我。
  • @AvickMukherjee 你应该在php.ini中增加error_reporting
  • @DainisAbols 我知道这是一篇旧帖子,但格式标识符“B”不存在......这让我困惑了一段时间。我认为您的意思是“A”或“a”代表上午和下午的事情。 php manual
【解决方案2】:

我不得不长期这样做。表示使用正则表达式解析日期并使用 mktime() 获取 unix 时间戳。在 PHP 中它看起来像这样:

// our date in oracle-style 
$orcl_date = "22-MAY-13 12.00.00.000000 AM";

// painfully extract date related parts
preg_match( '/^(\d{2})-(\w{3})-(\d{2})\s(\d{2})\.(\d{2})\.(\d{2})\.(\d{6})\s(AM|PM)/' , $orcl_date , $matches );
@list( $all , $day , $month , $year , $hour , $minute , $sec , $minisec , $ampm ) = $matches;

// do AM/PM illogical behaviour
if ( $ampm == 'AM' ) { // 12 AM (midnight) will result in zero.
    if ( $hour == 12 )
        $hour -=  12;
} else { 
    if ( $hour != 12 ) // 12 pm (high noon) 
        $hour +=  12;
}

$month = array_search( $month , array("","JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEZ" ) );

// oracle does not give us any information about the century. We assume that it's the current one.
$year += 2000;

// make a unix timestamp.
$timestamp = mktime( $hour , $minute , $sec , $month , $day , $year );

$result = strftime('%Y-%m-%d %H:%M:%S',$timestamp);

【讨论】:

    猜你喜欢
    • 2013-12-17
    • 2013-09-12
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2016-11-26
    相关资源
    最近更新 更多