strtotime() & date() 将日期转换为与之前相同的格式时的奇怪行为

发布于 2024-10-19 00:14:49 字数 486 浏览 0 评论 0原文

我必须将日期格式转换为 mm-dd-yyyy 我不知道当前的日期格式是什么,它是动态的,所以如果我有动态日期格式已经是 mm-dd -yyyy 然后 date() 函数返回低于输出

    $date='02-13-2011';
    echo date('m-d-Y',strtotime($date));

输出是

  01-01-1970

?>

http://codepad.org/AFZ6jel7

所以我必须检查日期是否已经在 中mm-dd-yyyy 则不应用日期格式。 还有其他方法吗?可能会在这些函数中传递另一个参数或类似的参数。

谢谢。

I have to convert date format in to mm-dd-yyyy I don't know what is the current date format it is dynamic so if I have dynamic date format is already in mm-dd-yyyy then date() function is returning below outout

    $date='02-13-2011';
    echo date('m-d-Y',strtotime($date));

output is

  01-01-1970

?>

http://codepad.org/AFZ6jel7

So I have to check if the date is already in mm-dd-yyyy then do not apply date formatting.
Is there any other way do this? may be passing one other parameter in these functions or something similar.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

败给现实 2024-10-26 00:14:49

我强烈怀疑这就是导致问题的原因:

通过查看各个组件之间的分隔符可以消除 m/d/y 或 dmy 格式的日期歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是短划线 (-) 或点 (.),则采用欧洲 dmy 格式。

(可以在strtotime文档中找到。)

你有破折号分隔符,所以它采用 dmy 格式,将其解析为 13 月份,因此实际上失败了。

即使不是 PHP 开发人员,我也能立即想到的选项:

  • 如果有一个函数允许您明确说明字符串的格式,请使用它。

    例如DateTime::createFromFormat()

  • 更改使用斜杠的格式
  • 更改格式以使用 dmy 而不是 mdy

I strongly suspect that this is what's causing the problem:

Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.

(Found in the strtotime documentation.)

You've got dash separators, so it's assuming d-m-y format, parsing it as a month of 13, and thus effectively failing.

Options I can think of off the top of my head, without being a PHP developer:

  • If there's a function which allows you to explicitly say what format the string is in, use that.

    For example DateTime::createFromFormat()

  • Change your format to use slashes
  • Change your format to use d-m-y instead of m-d-y
预谋 2024-10-26 00:14:49

将 - 替换为 mdY 的 / 会有帮助。

echo date('m-d-Y',strtotime(str_replace('-', '/', $date)));

Replacing - with / for m-d-Y will help.

echo date('m-d-Y',strtotime(str_replace('-', '/', $date)));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文