我从数据库中提取一些日期并使用PHP strftime
格式化它们。
现在,一切都按预期工作,除了我使用%A
格式,它应该给我完整的工作日名称,函数只返回NULL,除非日期恰好在周末,在在哪种情况下,它正确地返回“星期六”或“星期日”。
所有其他格式都有效,甚至%a
(工作日短名称)。
它似乎不依赖于我使用的语言环境,也不依赖于日期的具体格式(如果我在strftime
上使用mktime
,则会出现同样的问题。
我唯一想到的是服务器方面存在某种令人难以置信的奇怪配置问题,但我想听听是否有人有其他想法...
编辑:一些代码,虽然它几乎是我之前写的......
$id = (int)$_GET['event'];
$res = mysql_query("SELECT date FROM events WHERE event_id=".$id);
$row = mysql_fetch_array($res);
echo strftime("%a %H:%M", $row['date']);
echo strftime("%A %H:%M", $row['date']);
第一个echo工作正常,返回例如Thu 15:30
,第二个返回NULL,除非$row['date']
落在星期六或星期日。
如果这可能有任何帮助,代码在一个类中,但我看不出这可能会如何影响结果......
EDIT2:这是 NOT 数据库或日期格式的问题,否则第一个回声将无效。另外,我可以删除数据库代码,并使用mktime
或strtotime
生成日期,但仍然无效。
EDIT3(解决方案):发现问题。在意大利语中,除了周六和周日之外,日期的名称以“(例如lunedì)”结尾,没有重音字母。操作的结果传递给json_encode
,显然不喜欢重音字符......对utf8_encode
(或htmlentities
)的调用解决了这个问题。
答案 0 :(得分:4)
根据手册:http://php.net/manual/en/function.strftime.php
如果你传递的不是时间戳,那你就错了。真的不能说为什么第一个通过而第二个没通过。也许PHP正试图弥补。在任何情况下,如果您有文本时间表示,则需要先在其上调用strtotime()
。
修改强>
我在我的系统中运行了以下代码
$row['date'] = '2011-04-06 08:33:29';
echo strftime("%a %H:%M", $row['date']);
echo '<br>';
echo strftime("%A %H:%M", $row['date']);
我把它作为输出
Notice: A non well formed numeric value encountered in F:\webroot\utils\test.php on line 4
Thu 00:33
Notice: A non well formed numeric value encountered in F:\webroot\utils\test.php on line 6
Thursday 00:33
您的系统上应该已启用通知。将其更改为时间戳应解决它。
编辑2
...另外,我可以删除数据库代码, 并使用mktime或生成日期 与strtotime,它仍然没有 工作
如果您可以发布不起作用的样本,我们可以看看
答案 1 :(得分:3)
在您的评论中,您说您的数据库包含2011-04-06 08:33:29
等日期。但是strftime
的第二个参数应该是一个unix时间戳,例如1302766547
,即1970-01-01 00:00:00 GMT
以来的秒数。试试这个:
echo strftime('%a %H:%M', strtotime($row['date']));