使用PHP strftime()使用date()格式字符串

时间:2014-03-26 15:35:59

标签: php date localization date-format strftime

我正在维护PHP代码,这似乎使得日期/时间处理变得非常糟糕。特别是此应用程序在其他语言环境中不能很好地工作。

其中一个问题是使用不可本地化的date()函数而不是strftime()函数。它在内部功能中使用了几层,实际上已经使用了数千次,并且有很多不同的格式字符串。

date()替换strftime()会花费太多时间。相反,我正在寻找让strftime()处理与date()相同的格式字符串但无法找到任何内容的方法。是否有任何已知的解决方案可以将strftime()date()格式字符串一起使用?

3 个答案:

答案 0 :(得分:1)

/**
 * Convert strftime format to php date format
 * @param $strftimeformat
 * @return string|string[]
 * @throws Exception
 */
function strftime_format_to_date_format($strftimeformat){
    $unsupported = ['%U', '%V', '%C', '%g', '%G'];
    $foundunsupported = [];
    foreach($unsupported as $unsup){
        if (strpos($strftimeformat, $unsup) !== false){
            $foundunsupported[] = $unsup;
        }
    }
    if (!empty($foundunsupported)){
        throw new \Exception("Found these unsupported chars: ".implode(",", $foundunsupported).' in '.$strftimeformat);
    }
    // It is important to note that some do not translate accurately ie. lowercase L is supposed to convert to number with a preceding space if it is under 10, there is no accurate conversion so we just use 'g'
    $phpdateformat = str_replace(
        ['%a','%A','%d','%e','%u','%w','%W','%b','%h','%B','%m','%y','%Y', '%D',    '%F',   '%x', '%n', '%t', '%H', '%k', '%I', '%l', '%M', '%p', '%P', '%r' /* %I:%M:%S %p */, '%R' /* %H:%M */, '%S', '%T' /* %H:%M:%S */, '%X', '%z', '%Z',
            '%c', '%s',
            '%%'],
        ['D','l', 'd', 'j', 'N', 'w', 'W', 'M', 'M', 'F', 'm', 'y', 'Y', 'm/d/y', 'Y-m-d', 'm/d/y',"\n","\t", 'H', 'G', 'h', 'g', 'i', 'A', 'a', 'h:i:s A', 'H:i', 's', 'H:i:s', 'H:i:s', 'O', 'T',
            'D M j H:i:s Y' /*Tue Feb 5 00:45:10 2009*/, 'U',
            '%'],
        $strftimeformat
    );
    return $phpdateformat;
}

我写这个函数是因为上面的答案都不足够。处理大多数转换-易于扩展。

@see https://www.php.net/manual/en/function.date.phphttps://www.php.net/manual/en/function.strftime.php

答案 1 :(得分:0)

我猜你需要将date()函数当前使用的格式转换为strftime()可以使用的格式。

为此,我建议将str_replace()与数组一起用作searchreplace个参数:

$oldFormat = 'Y-m-d';

$search  = array('Y', 'm', 'd');
$replace = array('%Y', '%m', '%d');

$newFormat = str_replace($search, $replace, $oldFormat);

当然,您应该添加所有需要转换的搜索和替换字词。

答案 2 :(得分:0)

从date()到strftime()的示例。谢谢Kick_the_BUCKET

$search  = array('Y', 'y', 'M', 'm', 'D', 'd');
$replace = array('%Y', '%y', '%B', '%b', '%A %d', '%A %d');

$dateFormat = str_replace($search, $replace, $dateFormat); ?>
echo $dateFormat