Yerel zaman damgası değiştirme
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?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
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"])));
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.
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.