php datetime输出问题

时间:2016-11-11 07:09:18

标签: php datetime

我根据某些条件从不同的列中获取数据库中的export function secureHttpFactory(backend: XHRBackend, defaultOptions: RequestOptions, securityService: SecurityService, cookieService: CookieService) { return new SecureHttp(backend, defaultOptions, securityService, cookieService); } @NgModule({ imports: [ HttpModule, CookieModule, StorageModule, ], declarations: [ ...DIRECTIVES, ...COMPONENTS, ], exports: [ ...DIRECTIVES, ] }) export class SecurityModule { // Only create on instance of these static forRoot(): ModuleWithProviders { return { ngModule: SecurityModule, providers: [ SecurityService, { provide: SecureHttp, useFactory: secureHttpFactory, deps: [XHRBackend, RequestOptions, SecurityService, CookieService] } ] }; } }

PHP中的脚本:

datetime

数据库以这种格式存储if($obj->acct_status == 2) $dt = date('d M, Y h:i:s A', strtotime($obj->approve_datetime)); if($obj->acct_status == 4) $dt = date('d M, Y h:i:s A', strtotime($obj->suspend_datetime));

datetime

输出:

2016-11-11 14:26:03

这个问题的原因是什么?

1 个答案:

答案 0 :(得分:4)

我坚信,当有可用格式时,应避免使用strtotime()

$from_format = 'Y-m-d H:i:s';
$to_format   = 'd M, Y h:i:s A';
$date = '2016-11-11 14:26:03';        


echo DateTime::createFromFormat($from_format, $date)->format($to_format);

输出:

11 Nov, 2016 02:26:03 PM

为什么你的代码失败我不能肯定地说,在这里工作很好但你可以诊断一点。我假设你的情况是因为strtotime()转换失败,返回-62169984000实际上是0000-00-00 00:00:00但由于第二,分钟,日和月不允许是0,计算结果导致0000-00-00 00:00:00减去1天和1个月等等30 Nov -0001 12:00:00,因此您的$obj->suspend_datetime似乎不包含正确的数据。

我已经编写了两个小功能来分享,这将使整个考验更容易处理:

function strtodatetime($date, $format = 'Y-m-d H:i:s'){
  return ($d = DateTime::createFromFormat($format, $date)) && $d->format($format) == $date ? $d : false;
}

function strtounixtime($date, $format = 'Y-m-d H:i:s'){
  return ($d = DateTime::createFromFormat($format, $date)) && $d->format($format) == $date ? $d->getTimestamp() : 0;
}

echo ($dt = strtodatetime($date)) ? $dt->format($to_format) : 'invalid format';
echo date('d M, Y h:i:s A', strtounixtime($obj->approve_datetime));

在您的方案中,使用strtounixtime()(更好的strtotime())如果失败,它将转换回unix时代。