【问题标题】:PHP echo Date from HTML Form and format it from Y-m-d to d-m-Y error 31-12-1969PHP 从 HTML 表单回显日期并将其从 Y-m-d 格式化为 d-m-Y 错误 31-12-1969
【发布时间】:2015-06-25 22:13:11
【问题描述】:

我有一个文本链接以 Y-m-d 格式传递日期 GET,因为它来自 MySQL。 接收到这个 GET 的页面使用下面的代码来回显我从上一页得到的日期

链接是这样的

page.php?thedate=2015-06-30

我需要显示这个日期的页面必须像这样转换这个日期

<?php echo date('d-m-Y',strtotime($_GET["thedate"]));?>

所以我们显示 30-06-2015

但它显示与此代码

31-12-1969

可能是什么问题?

【问题讨论】:

  • 我似乎无法重现该错误,我得到30-06-2015 在您尝试在任何地方回显之前,您是否对thedate 做了任何事情?
  • 没什么,这就是奇怪的原因
  • 试试&lt;?php echo date('d-m-Y',strtotime(urldecode($_GET["thedate"])));?&gt;
  • thedate 的值绝对不是 '2015-06-30'。您尝试转换为时间的值无效,因此由于您的时区,它呈现 01-01-1970 减去几个小时。

标签: php html mysql forms date


【解决方案1】:

您的代码看起来没问题。但是很少有想法,可能会出什么问题:

首先:试试下面的代码:

<?php
    var_dump($_GET['thedate']); // check what it is?
    date_default_timezone_set('Europe/Warsaw'); // set default timezone to your zone / user zone
    echo date('d-m-Y',strtotime('2015-06-30')); // check that date is working with plain text
?>

首先记住始终使用date_default_timezone_set('Europe/Warsaw');。它对您的应用程序非常重要。其次,以纯文本方式输入日期。如果这有效,则意味着日期函数工作正常,并且您的 GET 或 GET 变量操作后有问题。

第二: 永远不要验证_GET变量。抱歉双重否定,但也许正因为如此,它可能更令人难忘;)。 始终解析用户在 URL 中输入的数据。总是解析:

  • _GET 数据
  • _POST 数据
  • _REQUEST 数据
  • _SERVER 数据(是的,其中一些可以被操纵
  • 所有其他易受攻击的数据...

总结一下:您的代码(您输入的代码是可以的),检查 GET 变量和之后的 get 变量操作。并始终检查所有不受信任的数据。


关于验证数据的更多信息:


根据在 _GET 变量上使用 urldecode 的 cmets 解决方案之一:

<?php echo date('d-m-Y',strtotime(urldecode($_GET["thedate"])));?> 

“警告!超全局变量 $_GET 和 $_REQUEST 已经解码。对 $_GET 或 $_REQUEST 中的元素使用 urldecode() 可能会产生意想不到的危险结果。”

来源:http://php.net/manual/en/function.urldecode.php

【讨论】:

  • 恕我直言,在服务器配置中设置默认时区比在每个 php 文件中声明它要好得多。
  • 是的,你是对的。对于 100% 安全的解决方案,我们可以输入: date_default_timezone_set(date_default_timezone_get());在 index.php 或配置类的开头某处。链接:stackoverflow.com/questions/6208666/php-timezone-not-set
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2021-03-09
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 2017-11-02
  • 2018-05-25
相关资源
最近更新 更多