2015-02-05 120 views
1

我想下面的字符串转换(或这个时间线),然后时间戳:PHP日期转换为时间戳

Closing date: 02 Apr 15 

Closing date: 06 May 15 

我的代码如下:

$start_date = explode("Closing date: ", $string); 
       $start_date = DateTime::createFromFormat('DD M yy', $start_date[1]); 

但是当我尝试回声$ start_date-> getTimestamp()它告诉我

Fatal error: Call to a member function getTimestamp() on a non-object 

任何想法,我可能做错了什么? DD M yy看起来像使用正确的日期格式。

+1

你为什么不只是使用'strtotime' timestamps格式? – ceejayoz 2015-02-05 15:24:31

+1

为什么假设只有RTFM才能“看起来”? http://php.net/manual/en/datetime.createfromformat。你正在编写你自己的格式字符串... – 2015-02-05 15:36:09

回答

2

它应该是:

$start_date = explode("Closing date: ", $string); 
$start_date = DateTime::createFromFormat('d M y', $start_date[1]); 

你需要传递给DateTime::createFromFormat()格式帮助它解析你的数据是d M y。我提取的字母从documentation意义:

  • dj:该月的天,2位有或没有前导零(0131131);
  • F and M:一个月的文本表示,如1月或9月(JanuaryDecemberJanDec);
  • y:一年的两位数字表示(假设在范围1970-2069(含));示例:9903(将分别解释为19992003)。
+0

很好解释! :) 谢谢! – MrD 2015-02-05 15:32:02

1

DD M yy实际上不是正确的格式。从DateTime::createFromFormat文档摘自:

d和L - 每天的文字表述 - 周一通过Sun或周日 至周六

尝试调用getTimestamp之前做的$start_date一个var_dump,我打赌是的实际上false

返回一个新的DateTime实例或在失败时返回FALSE。

您需要使用的格式是d M y

+0

DD \t“0”[0-9] | [1-2] [0-9] | “3”[01] \t“07”,“31” – MrD 2015-02-05 15:24:00

2

你需要改变 'DD中号YY' 一到正确的日期格式 “d M Y”

$start_date = explode("Closing date: ", 'Closing date: 02 Apr 15'); 
$start_date = DateTime::createFromFormat('d M y', $start_date[1]); 

    var_dump($start_date) 

    object(DateTime)[3430] 
     public 'date' => string '2015-04-02 15:27:28.000000' (length=26) 
     public 'timezone_type' => int 3 
     public 'timezone' => string 'Europe/London' (length=13) 
0

为什么不能简单地转换日期使用strtotime

$string="Closing date: 02 Apr 15"; 
$start_date = explode("Closing date: ", $string); 
print strtotime($start_date[1]);