2012-11-28 24 views
6

Şöyle datestrings vardır:strtotime yanlış

"2012 28 Nov 21:00 CET" 

strtotime("2012 28 Nov 21:00 CET") dönüş yanlış.

Bu dizeyi bir tarih nesnesine dönüştürmenin herhangi bir yolu var mı, yoksa onu farklı şekilde biçimlendirmem gerekiyor mu?

+2

['date_parse_from_format'] 'ı kullanmayı deneyin (http://php.net/manual/en/function.date-parse-from-format.php). –

+1

Dize tarihini nereden alıyorsunuz? – phpisuber01

+0

@ phpisuber01 Bir html sayfasından çıkartılıyor. – Johan

cevap

13

2012 28 Nov 21:00 CET garip tarih/saati biçim. Y-G-A? Bunu nereden aldın? Her halükarda

, DateTime nesnesi daha iyi bir iş yapacak bir yöntem createFromFormat o ayrıştırma vardır:

$dt = DateTime::createFromFormat("Y d M H:i T", '2012 28 Nov 21:00 CET'); 
$ts = $dt->getTimestamp(); 
echo $ts; // 1354132800 

Burada deneyin: http://codepad.viper-7.com/NfAmcw

strtotime bir "İngiliz metinsel datetime" beklediğini (according to the manual) YDM değil. Herhangi bir zaman strtotime yanlış döndürür, yalnızca bu uygulamada beklenen dize anlamıyor.

Not: m

Tarihler/d/y veya GAY biçimleri çeşitli bileşenler arasındaki ayırıcı bakarak belirsizlikler vardır: eğer ayırıcı bu konuyla manuel sayfa fırsatlar Üzerine Bir Not bir eğik çizgidir (/), daha sonra Amerikan m/d/y varsayılır; ayırıcı bir tire (-) veya nokta (.) ise, o zaman Avrupa d-m-y formatı kabul edilir.

Potansiyel belirsizliği önlemek için, mümkün olduğunda, ISO 8601 (YYYY-AA-GG) tarihlerini veya DateTime :: createFromFormat() öğelerini kullanmak en iyisidir.

Bu, DateTime gibi tarih veya saatlerle herhangi bir etkileşim için üstün bir araçtır.

Belgeler

+0

Parlak! Çok teşekkür ederim! – Xyon

1

strtotime bir tarih nesnesi oluşturmuyor, yalnızca girişinizi ayrıştırmaya çalışır ve bir unix zaman damgası döndürür.

Burada geçerli biçimlerini bulabilirsiniz: http://www.php.net/manual/en/datetime.formats.php

echo strtotime("2012-11-28T21:00:00+01:00"); 

çıkış 1354132800

bir php DateTime nesne oluşturmak için bunu yapabilirsiniz olacaktır:

$date = new DateTime('2012-11-28T21:00:00+01:00'); 
echo $date->format('Y-m-d H:i:s');