使用 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))