Bir Euro biçimi bekliyor gibi PHP strtotime () görünüyor

4 Cevap php

Ben bir form üzerinde bir tarih alanı kabul PHP'nin strtotime () yöntemi kullanılarak oldum. Ben onu herhangi bir tarih gösterimi (sözde) "Yarın", "Next Perşembe", ya kabul edecek ve Unix zaman damgası dönüştürmek nasıl, ne kadar güçlü seviyorum.

Bu büyük çalışma oldu - düne kadar. Birisi "2-4-10" girdi ve yerine 4 Şubat 2010 oturum açma, bu 10 Nisan 2002 giriş! Yani bunun yerine M-D-Y Y-M-D bekleniyor.

Ben belki sorun sadece 2 haneli yılın kullanarak düşündüm, bu yüzden "2010/02/04" ile tekrar denedi. Bu giriş 2 Nisan 2010! Bu noktada ben () ne yapıyor strtotime anlamıyorum. PHP.net bir ABD İngilizce tarih biçimi beklediğini söyledi. Neden o zaman D-M-Y zannedebilir?

Bu etrafında bir yolu var mı? Yoksa strtotime kullanarak durdurmak zorunda () mı?

Note: Ben şimdi bir test yaptım. Eğer bölü yerine tire / tire kullanmak zaman, hatta 2/4/10 ile çalışıyor. Neden dünya üzerinde böyle olsun mu? Strtotime geçirmeden önce form girişi üzerine - ("/", $ girdi "") () Ve hepsi o eğer, ben sadece str_replace çalıştırmak gerekir?

4 Cevap

- ISO tarihi belirtir:

03-02-01  => 1. february 2003 (ISO)
01.02.03  => 1. february 2003 (European)
02/01/03  => 1. february 2003 (US)

strtotime() davranışı, büyük ölçüde GNU date input biçimleri spec dayanmaktadır. Ama olduğu gibi güçlü gibi, zihinlerini okumak için beklenmemelidir. Izin serbest form kullanıcı tarih giriş sürekli sorun istiyor.

Ben bu sorunu vardı ve önerilen tam olarak ne yaparak çözüldü - kullanıcının girdiği tarihte bir str_replace yapmak slashesle tire yerine. ISO tarihini kullanarak ve sorunu çözer bu önler strtotime.

strtotime doğası gereği bulanık olduğu, bu yüzden her zaman istediğiniz ne olacağını kabul edemeyiz. Eğer 2010/04/02 girerseniz o zaman bu strottime yapmaya çalışıyor ne olduğu, 2 Nisan 2010 dönmek için beklenebilir. Eğik çizgi tire bir str_replace çalıştıran biçimde giren insanlar yanlış tarih almak anlamına gelebilir.

Eğer yukarıdaki PHP 5.3 veya çalıştırıyorsanız, date_parse_from_format düşünün () veya PHP 5.1 ve üzeri için Unix üzerinde strptime () düşünün. Eğer uluslararası bir site çalışan ve içine kullanıcı 2010/02/04 girdiği bir metin kutusu etiketli tarih var eğer o zaman hayır vardır - hem de fonksiyonları bekliyoruz ne biçim kullanıcıların söylemek eğer (bir biçim alabilir, bu yüzden potansiyel belirsizliği kaldırmak amaçlanan tarih ne olduğunu bilmek için yol).