linux strftime %b 中文 英文 混乱,strftime与locale奇怪的行为

在PHP项目中,开发者遇到一个日期处理的不一致问题。当从MySQL获取Unix时间戳并尝试根据用户区域设置显示日期时,使用`strftime()`和`date()`函数分别得到2015年12月31日和2014年12月31日的结果。代码中设置了locale,并定义了一个多字节字符串处理函数。该问题在不同环境和配置下重现,包括Apache和Windows上的PHP版本。
摘要由CSDN通过智能技术生成

在项目中,我想根据用户区域设置显示日期.

日期存储在mysql表中,作为unix时间戳.

为了让我在特定的语言环境中显示日期,我有以下代码:

// in my config file:

// $setLocale is from database (examples: en_EN.UTF8 or fr_FR.UTF8 or it_IT.UTF8 etc)

setlocale(LC_ALL, $setLocale);

//in my function file

function my_mb_ucfirst($str, $e='utf-8')

{

$fc = mb_strtoupper(mb_substr($str, 0, 1, $e), $e);

return $fc.mb_substr($str, 1, mb_strlen($str, $e), $e);

}

//and in any php page i want to show dates:

$dateFromDb = 1419980400; // example value from table

$date = my_mb_ucfirst(strftime("%b %d, %G", $dateFromDb));

现在奇怪的部分:

上面的日期1419980400给了我两个不同的结果.

echo my_mb_ucfirst(strftime("%b %d, %G", 1419980400));

这给了2015年12月31日

echo date("M d, Y", 1419980400);

这给了2014年12月31日

任何人都可以向我解释为什么会这样吗?

上述过程中是否有任何错误?

注意:这个错误/错误我用三种不同的配置验证它:

apache 1.3 + php 4.3

apache 2.0 + php 5.3

windows xp + xampp 1.7.4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值