使用 php strftime 我可以定义 %p 吗?
With php strftime can I define %p?
使用某些语言环境设置,%p
return 是一个空字符串。在这些情况下,我更愿意 return 上午或下午,即使这对语言不正确。
用例是事件日历,用户可以选择覆盖默认值并指定他们想要 12 小时的时间。如果在 class 的开头,我可以检测 %p
return 是本地化字符串还是空字符串,并在空字符串时将其定义为 AM 或 PM,这将使代码变得容易得多。
-- 编辑--
<?php
setlocale(LC_TIME, 'ru_RU.UTF8');
print(strftime('%l:%M %p %Z', time()));
?>
在许多语言环境中,例如 ru_RU
、%p
returns 是无用的空字符串。当未定义 AM 或 PM 的翻译时,我想将其定义为 AM 或 PM。就像我在指定编辑之前的问题。
首先想到的是,这可能更像是一个创可贴解决方案,但是要在 $dformat
中检查 %p
已编辑的解决方案
如果我在评论中收集到多种形式的格式,那么如果 %p 呈现空字符串,那么最好实际插入您自己的 %p,因此此解决方案可能适合您:
$check_for_empty_string = false;
if (preg_match("@%p@", $dformat)) {
if (strftime('%p', $node->start) == '') {
// get 24 hours
$hour = strtotime('%H', $start);
if ($hour >= 12) {
// it's PM
$dformat = preg_replace("@%p@", $this->PM, $dformat);
} else {
$dformat = preg_replace("@%p@", $this->AM, $dformat);
}
}
}
$start = strftime($dformat, $node->start);
$search = array(
'/^12:00 ' . $this->AM . '/',
'/^00:00$/', '/^12:00 ' . $this->PM . '/',
'/^12:00$/'
);
$replace = array(
'12:00 ' . $this->getString('Midnight'),
'00:00 ' . $this->getString('Midnight'),
'12:00 ' . $this->getString('Noon'),
'12:00 ' . $this->getString('Noon')
);
$start = preg_replace($search, $replace, $start);
$event->setAttribute('start', $start);
private function TwelveHourHack($dformat, $ts) {
if($this->safeTwelve) {
return strftime($dformat, $ts);
}
$dformat = preg_replace('/%p/', date('A', $ts), $dformat);
return strftime($dformat, $ts);
}
这就是我最终做的事情。 $this->safeTwelve 是布尔值设置在 class 通过查看
启动
strlen(strftime('%p', $now))
使用某些语言环境设置,%p
return 是一个空字符串。在这些情况下,我更愿意 return 上午或下午,即使这对语言不正确。
用例是事件日历,用户可以选择覆盖默认值并指定他们想要 12 小时的时间。如果在 class 的开头,我可以检测 %p
return 是本地化字符串还是空字符串,并在空字符串时将其定义为 AM 或 PM,这将使代码变得容易得多。
-- 编辑--
<?php
setlocale(LC_TIME, 'ru_RU.UTF8');
print(strftime('%l:%M %p %Z', time()));
?>
在许多语言环境中,例如 ru_RU
、%p
returns 是无用的空字符串。当未定义 AM 或 PM 的翻译时,我想将其定义为 AM 或 PM。就像我在指定编辑之前的问题。
首先想到的是,这可能更像是一个创可贴解决方案,但是要在 $dformat
中检查 %p
已编辑的解决方案
如果我在评论中收集到多种形式的格式,那么如果 %p 呈现空字符串,那么最好实际插入您自己的 %p,因此此解决方案可能适合您:
$check_for_empty_string = false;
if (preg_match("@%p@", $dformat)) {
if (strftime('%p', $node->start) == '') {
// get 24 hours
$hour = strtotime('%H', $start);
if ($hour >= 12) {
// it's PM
$dformat = preg_replace("@%p@", $this->PM, $dformat);
} else {
$dformat = preg_replace("@%p@", $this->AM, $dformat);
}
}
}
$start = strftime($dformat, $node->start);
$search = array(
'/^12:00 ' . $this->AM . '/',
'/^00:00$/', '/^12:00 ' . $this->PM . '/',
'/^12:00$/'
);
$replace = array(
'12:00 ' . $this->getString('Midnight'),
'00:00 ' . $this->getString('Midnight'),
'12:00 ' . $this->getString('Noon'),
'12:00 ' . $this->getString('Noon')
);
$start = preg_replace($search, $replace, $start);
$event->setAttribute('start', $start);
private function TwelveHourHack($dformat, $ts) {
if($this->safeTwelve) {
return strftime($dformat, $ts);
}
$dformat = preg_replace('/%p/', date('A', $ts), $dformat);
return strftime($dformat, $ts);
}
这就是我最终做的事情。 $this->safeTwelve 是布尔值设置在 class 通过查看
启动strlen(strftime('%p', $now))