如何使用Php获取本地化信息

16

如何使用Php获取Locale,我想根据位置获取时区,是否有可能在Php中实现。

我需要将其转换为GMT并保存到数据库中。然后,我需要在UI中以相同的时间和时区再次提取它。


1
机器上运行 PHP 的区域设置,还是发起 HTTP 请求的用户的区域设置,这两者哪个会被 PHP 处理? - Quentin
3
“locale” 不等于 “location”,我相信你的意思是“location”。 “locale” 是系统国家和语言设置的意思。 - jigfox
3个回答

54

使用

setlocale  (LC_ALL,"0");

获取实际区域设置的结果。


非常感谢!确实是在 PHP 文档中,但是它就在我鼻子底下,我竟然错过了 :) - Eric Redon
这应该是上面问题的答案。非常感谢! - Oliver M Grech
9
我目前无法让这个程序在我的机器上运行(我的机器上安装的是 PHP 5.4)。不管我设置什么本地语言,每次运行 "setlocale(LC_ALL,'0')" 都会返回一个单字母字符串 "C"!请帮我看看问题出在哪里。 - John Slegers
我也有这个问题,但不总是出现。有时我获得这个字符串 LC_CTYPE=de_DE.UTF8;LC_NUMERIC=C;LC_TIME=de_DE.UTF8;LC_COLLATE=de_DE.UTF8;LC_MONETARY=de_DE.UTF8;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C,有时只有 C。很奇怪的 bug。 - Armin
我的 setlocale(LC_ALL,"0") 返回 "C" ... 为什么? - Tobia
2
@JohnSlegers,@Armin,@Tobia:如果以前没有设置过区域设置,则“C”是默认设置。它表示“无”。尝试在此时使用money_format('%i',123.45);,结果将是不带货币符号的 123.45。但将其设置为“en_EN”,您将得到USD 123.45。您还可以设置本地环境并在执行完后通过以下调用将其还原回之前的状态,setlocale(LC_ALL,'C')... 详见:http://unix.stackexchange.com/questions/87745/what-does-lc-all-c-do - algorhythm

1

您可以使用:

date_default_timezone_set('Europe/London');
date_default_timezone_get; // Europe/London

或者

if (ini_get('date.timezone')) {
    echo 'date.timezone: ' . ini_get('date.timezone');
}

那些双单引号是有原因的,还是打错了? - Svish
我能使用这个函数获取本地时区吗? date_default_timezone_get() - Ramakrishnan

1

你无法从服务器端获取客户端的语言环境或时区,只能通过 JavaScript 在客户端进行猜测。

(如果浏览器支持 Java,您可以获取更多的语言环境信息,但这有点麻烦,而且每个人都讨厌小程序。)

为了处理 Web 应用程序中的时区,将所有时间存储为 UTC 时间戳,并使用用户选择的时区将其转换为文本以进行页面格式化。您可以使用类似于 此问题 中的方法来猜测时区,但由于这不可靠,因此还应允许用户明确选择时区。


我们正在开发一个 PHP 网站,允许用户配置消息(短信)的计划时间。因此,我们需要允许最终用户在各个时区设置时间。 - Ramakrishnan
是的...用户必须手动指定他们正在使用的timezone_identifier,并将其传递给date_default_timezone_set,如Sarfraz所述。请参阅http://www.php.net/manual/en/timezones.php以获取标识符列表;您可以将它们放在下拉框或其他UI中。您可以使用JavaScript选择最佳猜测时区作为下拉列表的默认值,如我链接的问题中所述,或者简单地默认为UTC。一旦用户输入了时间和时区,您应将其转换为UTC以进行数据库存储。 - bobince
+1 用于存储UTC时间戳。您可能还想检查phpBB源代码(或类似的PHP应用程序),他们在注册时让用户选择其时区,我认为这正是您要寻找的。 - wimvds
对于UTC时间戳,建议使用+1,因为它们易于按[字母]数字排序,而不需要使用复杂的日期算术。 - Patanjali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接