Sorunun bazı nüanslarla ilgili olduğundan şüpheleniyorum strtotime()
.
strtotime()
hemen hemen her dizeyi alıp bir Unix zaman damgasına dönüştürebilirsiniz. Sorun, dize açık bir saat dilimi içermiyorsa, tarafından ayarlananı kullanmasıdır date_default_timezone_get()
. Bu geçerli kullanıcıdan ayarlanmalıdır (hesap proxy'si tarafından ayarlanır). Ancak, çektiğiniz dize $node->field_date->value
dolaylı olarak UTC'de. Başka bir deyişle, dize tarafından ayrıştırılıyor bence strtotime()
'UTC / değil' Amerika / New_York 'olarak yorumlanmaktadır.
İyi haber şu ki durumunuzu çok basitleştirebilirsiniz. Tarih aralığı için alan öğesi dört bölümden oluşur
- 'değer', UTC'de dize olarak başlangıç tarihidir
- 'start_date', 'değeri' temsil eden bir DrupalDateTime nesnesidir
- 'end_value', UTC'de dize olarak bitiş tarihidir
- 'end_date', 'end_value'yu temsil eden bir DrupalDateTime nesnesidir
Düz tarih saat alanı için
- 'değer' UTC'de dize olarak tarih
- 'tarih', 'değeri' temsil eden bir DrupalDateTime nesnesidir
Böylece, DrupalDateTime()
nesneyle doğrudan çalışabilirsiniz . Buna ek olarak, söz konusu date.formatter
hizmet, sayfayı varsayılan olarak görüntüleyen kullanıcının kullandığı uygun saat dilimini de çekmelidir (kullanıcının etkin dilini kullanmaya ek olarak).
Bunun gibi bir şeyin işe yarayacağından şüpheleniyorum
$node = Node::load(2100);
$start_date = $node->field_date->start_date;
$formatted = \Drupal::service('date.formatter')->format(
$start_date->getTimestamp(), 'custom', 'Y-m-d H:i:s P'
);
Not Sistemin hangi saat diliminin kullanımda olduğunu düşündüğünü görebilmeniz için 'P' biçiminde yer tutucusu ekledim.
Yönetici / config / bölge / ayarlarında doğru saat dilimini ayarladığınızdan ve kullanıcı saat diliminizin beklediğiniz ayar olduğundan emin olun. Ayrıca php.ini dosyasında doğru saat dilimi ayarının yapılmış olduğundan emin olun ( date.timezone
ayar budur); Bu ayarlanmadığında garip şeyler olur (Ve başımın üstünden, kurulumcuda veya durum raporunda ayarlanmadığında bir uyarıya neden olup olmadığını hatırlamıyorum. sorunu hatırlıyorum, ancak taahhüt).
date
DrupalDateTime erişim özelliği hakkında bilmiyordum . Meraktan nasıl anladınız? Alanımın bu türden olduğunu anlayabildim,DateTimeItem
ancak içeride bu sınıf için birdate
(veyavalue
) kamu üyesi olduğu açık görünmüyor .