使用php将非标准日期字符串转换为mysql日期时间字符串

时间:2017-05-02 09:46:41

标签: php

我的目的是转换以下日期

$newDate= Carbon::createFromFormat('d/m/y H:m:s', $originalDate); 到这个

var_dump($newDate->toDateTimeString())

我尝试了php的典型日期格式功能以及Carbon ......

这样的事情
2019-03-20 13:00:55

在这种情况下 /dir/biserver-ce/start-pentaho.sh /biserver-ce/tomcat/logs/pentaho.log会带来odooadmin@srv0015:/opt/biserver-ce/tomcat/logs$ cat pentaho.log 2017-05-02 10:58:30,252 ERROR [org.apache.jackrabbit.core.RepositoryImpl] Failed to initialize workspace 'default' javax.jcr.RepositoryException: Unable to initialize query handler: org.apache.jackrabbit.core.query.lucene.SearchIndex@7ac41a30 at org.apache.jackrabbit.core.config.RepositoryConfigurationParser$1.getQueryHandler(RepositoryConfigurationParser.java:658) at org.apache.jackrabbit.core.config.RepositoryConfig.getQueryHandler(RepositoryConfig.java:1037) ... Caused by: java.io.EOFException at java.io.DataInputStream.readInt(DataInputStream.java:392) at org.apache.jackrabbit.core.query.lucene.IndexInfos.read(IndexInfos.java:303) at org.apache.jackrabbit.core.query.lucene.IndexInfos.<init>(IndexInfos.java:107) at org.apache.jackrabbit.core.query.lucene.MultiIndex.<init>(MultiIndex.java:253) at org.apache.jackrabbit.core.query.lucene.SearchIndex.doInit(SearchIndex.java:555) at org.apache.jackrabbit.core.query.AbstractQueryHandler.init(AbstractQueryHandler.java:78) at org.apache.jackrabbit.core.config.RepositoryConfigurationParser$1.getQueryHandler(RepositoryConfigurationParser.java:655) ... 220 more 2017-05-02 10:58:30,263 ERROR [org.apache.jackrabbit.core.RepositoryImpl] Unable to start repository, forcing shutdown... 2017-05-02 10:58:30,543 ERROR [org.apache.jackrabbit.core.RepositoryImpl] failed to start Repository: Unable to initialize query handler: org.apache.jackrabbit.core.query.lucene.SearchIndex@7ac41a30 javax.jcr.RepositoryException: Unable to initialize query handler: org.apache.jackrabbit.core.query.lucene.SearchIndex@7ac41a30 at org.apache.jackrabbit.core.config.RepositoryConfigurationParser$1.getQueryHandler(RepositoryConfigurationParser.java:658) ... Caused by: java.io.EOFException at java.io.DataInputStream.readInt(DataInputStream.java:392) at org.apache.jackrabbit.core.query.lucene.IndexInfos.read(IndexInfos.java:303) at org.apache.jackrabbit.core.query.lucene.IndexInfos.<init>(IndexInfos.java:107) at org.apache.jackrabbit.core.query.lucene.MultiIndex.<init>(MultiIndex.java:253) at org.apache.jackrabbit.core.query.lucene.SearchIndex.doInit(SearchIndex.java:555) at org.apache.jackrabbit.core.query.AbstractQueryHandler.init(AbstractQueryHandler.java:78) at org.apache.jackrabbit.core.config.RepositoryConfigurationParser$1.getQueryHandler(RepositoryConfigurationParser.java:655) ... 220 more 2017-05-02 10:58:30,549 ERROR [org.springframework.web.context.ContextLoader] Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'filterChainProxy' defined in file [/opt/biserver-ce/pentaho-solutions/system/applicationContext-spring-security.xml]: Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'basicProcessingFilter' defined in file [/opt/biserver-ce/pentaho-solutions/system/applicationContext-spring-security.xml]: Cannot resolve reference to bean 'authenticationManager' while setting bean property 'authenticationManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationManager' defined in file [/opt/biserver-ce/pentaho-solutions/system/applicationContext-spring-security.xml]: Cannot create inner bean 'pen:bean#74e48049' of type [org.pentaho.platform.engine.core.system.objfac.spring.BeanBuilder] while setting bean property 'providers' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pen:bean#74e48049': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.providers.dao.DaoAuthenticationProvider#1' defined in file [/opt/biserver-ce/pentaho-solutions/system/applicationContext-spring-security-jackrabbit.xml]: Cannot create inner bean 'pen:bean#2a743bcc' of type [org.pentaho.platform.engine.core.system.objfac.spring.BeanBuilder] while setting bean property 'userDetailsService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pen:bean#2a743bcc': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cachingUserDetailsService' defined in file [/opt/biserver-ce/pentaho-solutions/system/pentahoObjects.spring.xml]: Cannot resolve reference to bean 'UserDetailsService' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserDetailsService': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDetailsService' defined in file [/opt/biserver-ce/pentaho-solutions/system/applicationContext-spring-security-jackrabbit.xml]: Cannot resolve reference to bean 'userRoleDaoTxn' while setting bean property 'userRoleDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRoleDaoTxn' defined in file [/opt/biserver-ce/pentaho-solutions/system/repository.spring.xml]: Cannot resolve reference to bean 'userRoleDao' while setting bean property 'target'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRoleDao' defined in file [/opt/biserver-ce/pentaho-solutions/system/repository.spring.xml]: Cannot resolve reference to bean 'adminJcrTemplate' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adminJcrTemplate' defined in file [/opt/biserver-ce/pentaho-solutions/system/repository.spring.xml]: Cannot resolve reference to bean 'jcrAdminSessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jcrAdminSessionFactory' defined in file [/opt/biserver-ce/pentaho-solutions/system/repository.spring.xml]: Cannot resolve reference to bean 'jcrRepository' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jcrRepository' defined in file [/opt/biserver-ce/pentaho-solutions/system/repository.spring.xml]: Invocation of init method failed; nested exception is javax.jcr.RepositoryException: Unable to initialize query handler: org.apache.jackrabbit.core.query.lucene.SearchIndex@7ac41a30 ,这不是我所期望的。

所以我不幸运......有没有办法以直接的方式做到这一点?

4 个答案:

答案 0 :(得分:2)

我认为这应该有用。

$date = "20/04/17 13:27:5";
$sec  = substr($date, strrpos($date, ":") + 1);
$sec  = substr("0{$sec}", -2);
$new  = substr($date, 0, strrpos($date, ":") + 1) . $sec;

$newDate = Carbon::createFromFormat('d/m/y H:i:s', $new);

我更改了格式,因为您使用m两次&#34;分钟&#34;和&#34;月&#34;。这个月是正确的,但不是分钟。而是将i用于带有前导零的分钟。

$sec我过去常常从字符串中获取第二个字符串。这将获得:的最后位置,并将获取其后的所有内容。 这假定您不更改字符串的格式 substr("0{$sec}", -2)向当前秒添加零并提取最后两个字符。这意味着50变为050,然后最后两个字符为50,因此我们最终没有填充,但5变为05,最后两个字符是唯一的字符。

$new使用零填充连接日期字符串的开头和新的第二个字符串。

$newDate是原始字符串,格式已更改。

答案 1 :(得分:1)

秒有问题。必须05不仅5

<?php

    $original_date = "20/04/17 13:27:5";
    $date_explode = explode(":", $original_date);
    $date_explode[2] = str_pad($date_explode[2],2,"0",STR_PAD_LEFT);
    $original_date = implode($date_explode,":");

    $date = DateTime::createFromFormat('d/m/y H:i:s', $original_date);
    echo date_format($date,"d-m-Y H:i:s");

?>

答案 2 :(得分:0)

这是一个有效的转换例程,可以创建您正在寻找的ISO格式。但正如已经提到的,你需要“修复”你提供的原始示例中指定秒的奇怪方式。如果确实是您收到的格式,则必须使用字符串函数。更好的方法是修复创建这种破碎格式的代码。

<?php
$input = '20/04/17 13:27:05';
$date = DateTime::createFromFormat('d/m/y H:i:s', $input);
var_dump($date->format('d-m-Y H:i:s'));

输出显然是:

string(19) "20-04-2017 13:27:05"

答案 3 :(得分:0)

不是这样的吗?

$newDate = Carbon::createFromFormat('d/m/y H:i:s', $originalDate);