在PHP中检索日期名称

时间:2011-10-14 09:13:17

标签: php date locale

我需要向用户显示表单中的本地化日期名称列表(如“Monday”,“Tuesday”,...)。我知道要获得任何日期的日期名称。但是有没有一种特殊的,防止故障的方法来获取阵列中的全天名称。

编辑:我可以在翻译文件中添加日期名称,但这很难维护。

7 个答案:

答案 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之类的人通过定义本地化文件和不同语言的硬编码来实现这一目标。这是实现这一目标的唯一方法。

我建议下载类似的内容并查看代码,看看它是如何完成的。

http://www.phpbb.com/downloads/olympus.php

答案 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);
}

来自how to create array of a week days name in php

答案 6 :(得分:-2)

此代码可以很好地运行: -

$dayNames = array(
    0=>'Sunday',
    1=>'Monday', 
    2=>'Tuesday', 
    3=>'Wednesday', 
    4=>'Thursday', 
    5=>'Friday', 
    6=>'Saturday', 
 );

现在举例来说,你想从阵列中获取任何一天: -

echo $dayNames[1]; //Output:- Monday