我需要向用户显示表单中的本地化日期名称列表(如“Monday”,“Tuesday”,...)。我知道要获得任何日期的日期名称。但是有没有一种特殊的,防止故障的方法来获取阵列中的全天名称。
编辑:我可以在翻译文件中添加日期名称,但这很难维护。
答案 0 :(得分:33)
$date = '2011/10/14';
$day = date('l', strtotime($date));
echo $day;
答案 1 :(得分:13)
将strftime()
与setlocale()
结合使用是一种选择。
但是你应该知道,在线程php安装上,setlocale()
可能会出现意外行为,因为每个进程维护的是区域设置信息,而不是每个线程。因此,每次调用setlocale()
之前每次调用strftime()
都很重要,以保证它使用正确的区域设置。
此外,对于Windows系统,您需要为$locale
的{{1}}参数使用一些不常见的字符串。
有关这两个问题的详细信息,请参阅文档。
这样的事情应该有效:
setlocale()
答案 2 :(得分:2)
$dayNames = array(
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
);
非常防止失败:)
更严重的是,PHPBB之类的人通过定义本地化文件和不同语言的硬编码来实现这一目标。这是实现这一目标的唯一方法。
我建议下载类似的内容并查看代码,看看它是如何完成的。
答案 3 :(得分:2)
“通常”的方式是从给定的last day
开始,并在每次迭代时计算一天。
for ($i = 0; $i < 7; $i++) {
$weekDayNames[] = strftime("%a", strtotime("last sunday +$i day"));
}
答案 4 :(得分:0)
setlocale(LC_TIME, 'de_DE');
$today = ( 86400 * (date("N")) );
for( $i = 0; $i < 7; $i++ ) {
$days[] = strftime('%A', time() - $today + ($i*86400));
}
print_r($days);
显然可以通过不调用time()7次等来优化,但这就是要点。它为您提供了适合语言环境的正确语言,并保持阵列的Sun-Sat顺序。
答案 5 :(得分:0)
我知道它已经很久了,但是怎么样:
$timestamp = strtotime('next Sunday');
$days = array();
for ($i = 0; $i < 7; $i++) {
$days[] = strftime('%A', $timestamp);
$timestamp = strtotime('+1 day', $timestamp);
}
答案 6 :(得分:-2)
此代码可以很好地运行: -
$dayNames = array(
0=>'Sunday',
1=>'Monday',
2=>'Tuesday',
3=>'Wednesday',
4=>'Thursday',
5=>'Friday',
6=>'Saturday',
);
现在举例来说,你想从阵列中获取任何一天: -
echo $dayNames[1]; //Output:- Monday