v2.5.2
Giriş yap

Yerel zaman damgası değiştirme

rephp7
489 defa görüntülendi

Merhaba,
Veritabanında tarihleri şu şekilde tutuyorum. 2021-09-19

date_default_timezone_set('Europe/Istanbul');
setlocale(LC_TIME, 'tr_TR.UTF-8');
echo strftime('%d %h %Y',strtotime($duyurular[$i]["tarih"]));

çıktısı: 19 Sep 2021

Bunu yerele göre Türkiye de ise 19 Eyl 2021 şeklinde, Avrupa için 19 Sep 2021 şeklinde nasıl gösterebilirim?

Cevap yaz
Cevaplar (4)
abdullahx
950 gün önce
date_default_timezone_set('Europe/Istanbul');
setlocale(LC_TIME, 'turkish');
echo strftime('%d %h %Y',strtotime($duyurular[$i]["tarih"]));

Bu şekilde yaparsan düzelir ama bu sefer de örneğin Ağustos ayında Türkçe karakter hatası alırsın. En iyisi şöyle yap.

date_default_timezone_set('Europe/Istanbul');
setlocale(LC_TIME, 'turkish');
echo iconv('latin5', 'utf-8', strftime('%d %h %Y', strtotime($duyurular[$i]["tarih"])));
rephp7
950 gün önce

Çok garip:
internetteki tüm yönergelerde bu var ama çalışmıyor: setlocale(LC_TIME, 'tr_TR.UTF-8');
Buna hiç denk gelmedim ama çalışıyor: setlocale(LC_TIME, 'turkish');
Anlamadım :D
Çok teşekkürler abdullahx hocam.

rephp7
950 gün önce

setlocale(LC_TIME, 'tr_TR.UTF-8'); de doğru çalışmıyor ki, ingilizce adları veriyor.
setlocale(LC_TIME, 'e'); yapsam kendisi timezone yi algılar mı? diyeceğimde bunda da ingilizce ay adlarını veriyor. Yine Türkçe ay adları dönmüyor.


for($m=1; $m<=12; ++$m){
    date_default_timezone_set('Europe/Istanbul');
    setlocale(LC_TIME, 'e');
    echo date('M', mktime(0, 0, 0, $m, 1)).'<br>';
}

Bunu da denedim çıktısı: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec şeklinde ingilizce. Bir Türlü Türkçe ay adını alamadım.

tayfunerbilen
950 gün önce

tr_TR yerine mevcut dil neyse onu belirtmen lazım. Örneğin almanya için de_DE ya da ingiltre için en_GB amerika için en_US gibi.
ona göre ilgili dillerin içeriğinde basacaktır, timezone içinse her ülkenin timezone'unu bilip ona göre bir listeleme yapabilirsin, biraz araştırırsan mutlaka dbsi vs. vardır yayınlanmış olan.