【问题标题】:strtotime() in php returning always 01-01-1970php 中的 strtotime() 总是返回 01-01-1970
【发布时间】:2014-02-11 07:24:54
【问题描述】:

我正在使用一个变量从数据库中获取日期,然后我将该变量传递给 strtotime 函数以获得所需的格式,但它总是返回错误的日期。也许在 strtotime 函数中传递变量时存在问题.请建议我,我应该如何以正确的格式获得正确的日期。

这就是我想要做的事情

 $date = $fetch_user['date'];
 $newDate = date("d-m-Y", strtotime($date));
 $day = date('l', strtotime($newDate));

 echo $newDate;
 echo "-----";
 echo $day;
 exit;

【问题讨论】:

  • 你的 $fetch_user['date'] 是什么
  • 你用的是哪个php版本?
  • 你能发布$date的值吗?
  • $fetch_user['date'] 持有什么?我可以知道确切的值吗?
  • 您使用了两次strtotime(),但第二次,您将第一次的结果提供给它。这似乎不对。

标签: php


【解决方案1】:

1970 年 1 月 1 日是所谓的 Unix 纪元。这是他们开始计算 Unix 时间的日期。如果您将此日期作为返回值,则通常意味着将日期转换为 Unix 时间戳返回(接近)零结果。所以日期转换不成功。很可能是因为它接收到错误的输入。

换句话说,您的 strtotime($date) 返回 0,这意味着 $date 以 strtotime 函数不受支持的格式传递。

因此,在调用 strtotime 之前,您必须自己检查 $date

【讨论】:

  • $date 返回的是 1970 年 1 月 1 日以外的有效日期,但仍然无法正常工作。当我使用日期作为字符串时,它可以正常工作。
【解决方案2】:

01-01-1970 意味着你可能得到 0 作为strtotime() 的结果。您可能正在使用该函数无法理解的格式。 PHP 文档指出:

函数期望得到一个包含英文日期的字符串 格式并将尝试将该格式解析为 Unix 时间戳( 自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数),相对于 现在给出的时间戳,如果没有提供现在,则为当前时间。

所以它不是很灵活。您可能想改用DateTime::createFromFormat。看看它是documentation

基本上,您必须指定日期字符串的格式,并将其作为输入。这样你就可以使用任何你想要的日期格式。

来自 php.net 的示例:

<?php
$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009');

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多