Strtotime fonksiyonu ile tarih fonksiyonunu kullanırken, tarih fomating sorun

6 Cevap

Ben tarihi biçimlendirmek strtotime fonksiyonu ile birlikte tarih fonksiyonunu kullanıyorum.

Ex:

<?php
$input_date = '03-JUL-09 14:53';

$formatted_date =  date("Y-m-d H:i:s", strtotime($input_date));

echo $formatted_date;
?>

Bana beklenen çıktıyı verir: 2009-07-03 14:53:00

ise giriş (I dakikalık bölümünü kaldırarak am) değiştirildi ise -

<?php
$input_date = '03-JUL-09 14';

$formatted_date =  date("Y-m-d H:i:s", strtotime($input_date));

echo $formatted_date;
?>

Burada çıkış hiç beklenmez ki, 1970-01-01 05:30:00 olduğunu.

Ben yapıyorum hata ve nasıl tamir edilebilir nedir.

Teşekkürler

Amit

6 Cevap

Bu numaralar 2 tarih dize ne olduğunu belirlemek için strtotime yetersizlik () aşağı gelir gibi bu görünüyor.

Benim iyi tavsiye () strtotime geçmeden önce tarih-saat değerini normalize etmektir. Bu gibi basit bir şey yeterli olabilir

if ( false === strpos( $input_date, ':' ) )
{
  $input_date .= ':00';
}

The function strtotime expects to be given a string containing a US English date format and will try to parse that format into a Unix timestamp. You can use strings like

  • 3 Temmuz 2009
  • şimdi
  • 09-07-03
  • 09-07-03 14:00:00
  • 1 hafta 2 gün 4 saat 2 saniye
  • Geçen pazartesi

Ama "09-07-03 14" gibi eksik tarih biçimi. Ayrıştırıcı Aradığınızda zaman varsayılan değeri neden bu kadar date("Y-m-d H:i:s", strtotime($input_date)); o, (1 Ocak 1970 00:00:00 UTC) 0 zaman damgası döndürür onu anlamak ve hiçbir şey döndürür yok.

Sen çözümlenebilir bir sağ dize vermek zorunda.

03-Temmuz-09 14 14:00 çalışıyor, geçerli bir tarih dizesi, 03-Temmuz-09 olmak görünmüyor

php manuel: strtotime - about bir Unix zaman damgası herhangi bir İngilizce metin datetime açıklamasına Ayrıştırma

1970-01-01 (örneğin ctime olarak), tipik bir temel tarihtir. Ben çıkış böylece 1970, bir tarih haline 0 değeri biçimlendirme inanıyorum, ve günün ilgisiz 05:30:00 zaman.

Ben bu her zaman istenen unsurları içermeyen bir tarihi biçimlendirmek için çalışırken bir tesadüftü olduğuna inanıyorum. Eğer pad tarih veri tam bir giriş tarihini oluşturmak için mi?

strtotime() Eğer dakikalık bölümünü çıkardığınızda, ikinci dizeyi ayrıştırmak için başarısız olur. Bu ekstra "14" yani döndürür bool(false) ne anlama geldiğini bilmiyor. date(false) date(0), size UNIX dönemin tarihini verir yani aynı şeyi geri döndürür çağırarak: 1 Ocak 1970 bilgisayarınızın yerel saatine göre ayarlanmış 00:00:00 GMT.

1970-01-01 05:30:00 Unix dönemi (1970-01-01 00:00:00 GMT / UTC) Hindistan'da zamanıdır. Bu strtotime ya da geri 0 ya da false, date ile 0 dönüştürüldü bu da demektir. Diğerleri açıkladığımız gibi, onun giriş işlemek değil çünkü bu.