我有以下代码,以获取特定日期的月份名称,然后使用以希伯来语获取月份名称。
$thismonthname = date("F", mktime(0, 0, 0, $thismonthnumber, 10));
date_default_timezone_set('Asia/Tel_Aviv'); // Set timezone to Israel
$locale = 'he_IL.utf8'; setlocale(LC_ALL, $locale); // Set Locale to Hebrew
$thismonthnameheb = strftime('%B', strtotime($thismonthname));
除2月外,它完美无缺。
当我打印出$ thismonthname时,它会显示“二月”,但是当我打印出$ thismonthnameheb时,它会用希伯来语说“מרץ(march)”。
发疯了,我无法弄清楚这一点。
答案 0 :(得分:1)
从时间到字符串和返回,你做了太多的转换
不要转换time -> string -> time
,只需保留时间值并将结果基于:
$thismonthtime = mktime(0, 0, 0, $thismonthnumber, 10);
$thismonthname = date("F", $thismonthtime);
date_default_timezone_set('Asia/Tel_Aviv'); // Set timezone to Israel
$locale = 'he_IL.utf8'; setlocale(LC_ALL, $locale); // Set Locale to Hebrew
$thismonthnameheb = strftime('%B', $thismonthtime);
答案 1 :(得分:0)
注意顺序:
php > $time = mktime(0,0,0,2, 10);
php > echo date('r', $time);
Mon, 10 Feb 2014 00:00:00 -0600 // everything ok here, I'm in UTC-6
php > date_default_timezone_set('Asia/Tel_Aviv');
php > echo date('r', $time);
Mon, 10 Feb 2014 08:00:00 +0200 // note how it's now 8 hours "later"
php > $month = date('F', $time);
php > echo $month;
February
php > $newtime = strtotime($month);
php > echo date('r', $newtime);
Sat, 01 Mar 2014 00:00:00 +0200 // hey! it's march again!
你把日期剥离到一个简单的月份名称,然后期望PHP神奇地能够猜出你期望做什么。如果您只喂一个月,它可以随意选择年/日/时间值。
答案 2 :(得分:0)
这与希伯来语无关,因为,至少在我使用的特定版本的PHP(5.3.10)上,
echo strftime('%d %B', strtotime('February'));
给出
01 March
正如评论中所建议的那样,这种可以说是出乎意料的行为基本上是由于PHP的假设给定月份的日期是30日,除非用户实际指定了不同的值 。因此,二月我们会溢出到三月一日。
查看this reference可能会有用。