gpt4 book ai didi

php - 我的一些代码使用 strftime() 的奇怪行为

转载 作者:可可西里 更新时间:2023-10-31 22:15:40 25 4
gpt4 key购买 nike

我从数据库中提取一些日期并使用 PHP strftime 来格式化它们。

现在,一切都按预期工作,除了如果我使用 %A 格式,它应该给我完整的工作日名称,函数只返回 NULL,除非日期恰好是一个周末,在这种情况下它会正确返回“星期六”或“星期日”。

所有其他格式都可以使用,甚至 %a(简称工作日名称)。它似乎不依赖于我使用的语言环境,也不依赖于日期的特定格式(如果我只是在 mktime 上使用 strftime 会发生同样的问题。

我唯一的想法是,这是某种令人难以置信的怪异服务器端配置问题,但我想听听是否有人对此有其他想法...

编辑:一些代码,虽然它几乎是我之前写的......

$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:这不是数据库或日期格式的问题,否则第一个 echo 将无法工作。此外,我可以只删除数据库代码,并使用 mktimestrtotime 生成日期,但它仍然不起作用。

EDIT3(解决方案):发现问题。在意大利语中,日期的名称以 ì 结尾(例如 lunedì),但星期六和星期日除外,它们没有重音字母。操作的结果被传递给 json_encode,它显然不喜欢重音字符...调用 utf8_encode(或 htmlentities)解决了问题。

最佳答案

根据手册: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

...Also, I can just remove the DB code, and generate the date with mktime or with strtotime and it still doesn't work

如果您可以发布不起作用的示例,我们可以看看

关于php - 我的一些代码使用 strftime() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5659637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com