Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中检索日名称_Php_Date_Locale - Fatal编程技术网

在PHP中检索日名称

在PHP中检索日名称,php,date,locale,Php,Date,Locale,我需要在表单中向用户显示本地化日期名称的列表(如“星期一”、“星期二”和…)。我知道如何获得任何日期的日期名称。但是,是否有一种特殊且防故障的方法来获取数组中的全天名称 编辑:我可以在翻译文件中添加日期名称,但这很难维护 $dayNames = array( 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', ); 是非常

我需要在表单中向用户显示本地化日期名称的列表(如“星期一”、“星期二”和…)。我知道如何获得任何日期的日期名称。但是,是否有一种特殊且防故障的方法来获取数组中的全天名称

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

$dayNames = array(
    'Sunday',
    'Monday', 
    'Tuesday', 
    'Wednesday', 
    'Thursday', 
    'Friday', 
    'Saturday', 
 );
是非常防故障的:)

更重要的是,PHPBB这样的公司通过定义本地化文件和不同语言的硬编码来实现这一点。这是唯一可靠的方法

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

setlocale(LC_TIME,'de_de');
$today=(86400*(日期)(“N”);
对于($i=0;$i<7;$i++){
$days[]=strftime('%A',time()-$today+($i*86400));
}
打印(天);
显然可以通过不调用time()7次等来优化,但这就是要点。它为您提供了适用于区域设置的正确语言,并使Sun Sat阵列的顺序保持得体。

结合使用是一个选项

但是,您应该注意,在线程化php安装上,
setlocale()
可能会表现出意外的行为,因为区域设置信息是按进程而不是按线程维护的。因此,每次调用
strftime()
之前都要调用
setlocale()
,以确保使用正确的区域设置,这一点很重要

另外,对于Windows系统,您需要为
setlocale()
$locale
参数使用一些不寻常的字符串

有关这两个问题的更多信息,请参阅文档

像这样的方法应该会奏效:

// define the locales for setlocale() for which we need the daynames
$locales = array(
  'en_EN',
  'de_DE',
  'nl_NL'
  // etc...
);

// be aware that setlocale() needs different values on Windows machines
// see the docs on setlocale() for more information
$locales = array(
  'english',
  'german',
  'dutch'
  // etc...
);

// let's remember the current local setting
$oldLocale = setlocale( LC_TIME, '0' );

// initialize out result array
$localizedWeekdays = array();

// loop each locale
foreach( $locales as $locale )
{
    // create sub result array for this locale 
    $localizedWeekdays[ $locale ] = array();

    // 7 days in a week
    for( $i = 0; $i < 7; $i++ )
    {
        // set the locale on each iteration again
        setlocale( LC_TIME, $locale );

        // combine strftime() with the nifty strtotime()
        $localizedWeekdays[ $locale ][] = strftime( '%A', strtotime( 'next Monday +' . $i . ' days' ) );

        // reset the locale for other threads, as a courtesy
        setlocale( LC_TIME, $oldLocale );
    }
}

// there is your result in a multi-dimensional array
var_dump( $localizedWeekdays );
//定义setlocale()的区域设置,我们需要这些区域设置的日名称
$locales=array(
"恩",,
“德乌德”,
“nl_nl”
//等等。。。
);
//请注意,setlocale()在Windows计算机上需要不同的值
//有关更多信息,请参阅setlocale()上的文档
$locales=array(
“英语”,
“德语”,
“荷兰语”
//等等。。。
);
//让我们记住当前的本地设置
$oldLocale=setlocale(LC_时间,'0');
//初始化输出结果数组
$localizedWeekdays=array();
//循环每个区域设置
foreach($locales作为$locale)
{
//为此区域设置创建子结果数组
$localizedWeekdays[$locale]=array();
//一周7天
对于($i=0;$i<7;$i++)
{
//在每次迭代中再次设置区域设置
setlocale(LC_TIME,$locale);
//将strftime()与漂亮的strotime()组合起来
$localizedWeekdays[$locale][]=strftime('%A',strotime('next Monday+'.$i.'days'));
//出于礼貌,重置其他线程的区域设置
setlocale(LC_时间,$oldLocale);
}
}
//这是多维数组中的结果
var_dump(本地化的工作日);

我知道已经很久了,但是:

$timestamp = strtotime('next Sunday');
$days = array();
for ($i = 0; $i < 7; $i++) {
 $days[] = strftime('%A', $timestamp);
 $timestamp = strtotime('+1 day', $timestamp);
}
$timestamp=strottime('nextsunday');
$days=array();
对于($i=0;$i<7;$i++){
$days[]=strftime('%A',$timestamp);
$timestamp=STROTIME(“+1天”,$timestamp);
}

中,此代码将非常有效:-

$dayNames = array(
    0=>'Sunday',
    1=>'Monday', 
    2=>'Tuesday', 
    3=>'Wednesday', 
    4=>'Thursday', 
    5=>'Friday', 
    6=>'Saturday', 
 );
现在,例如,您希望从阵列中获取任意一天:-

echo $dayNames[1]; //Output:- Monday
“通常”的方法是从给定的
最后一天开始
,并在每次迭代中计算一天

for ($i = 0; $i < 7; $i++) {
  $weekDayNames[] = strftime("%a", strtotime("last sunday +$i day"));
}
($i=0;$i<7;$i++)的
{
$weekDayNames[]=strftime(“%a”,strotime(“上周日+i天”);
}

日期名称?你是说像星期一,星期二,星期三。。。等等?为什么不自己定义它们?这通常是最好的方式,因为询问
date()
取决于众所周知不可靠的区域设置。(参考)(reference)任何本地化解决方案都需要在您的总体本地化策略中加以考虑。Vascowhite的解决方案不一定是特定于语言环境的,但可以作为许多不同本地化解决方案的基础。请看我的评论,并注意他的调整。如果您使用日期的数字索引,这将允许您获得一个可预测的字符串,然后您可以将其用作返回本地化字符串的键。很难为所有语言维护,这让我很难过。如果您要这样做,应该是“星期日”…'“星期六”与从日期(“w”)返回的时间一致,其中星期日是第0个元素。我看不出此解决方案与已批准的解决方案之间有任何区别。工作后它突然不起作用,我停止了apache!现在返回的是数字而不是日期名称…感谢您保存我的日期。请注意,本地化的工作日是在
windows-1250
中返回的,而不是
utf-8
。可能需要额外的编码转换,例如通过
iconv
。在Win64 PHP7.0上测试。
echo $dayNames[1]; //Output:- Monday
for ($i = 0; $i < 7; $i++) {
  $weekDayNames[] = strftime("%a", strtotime("last sunday +$i day"));
}