【问题标题】:PHP: How to create a timestamp from pattern H:i (17:45)?PHP:如何从模式 H:i (17:45) 创建时间戳?
【发布时间】:2012-12-19 18:16:45
【问题描述】:

我当前的代码:

<?php
    $timestamp = DateTime::createFromFormat("d.m.Y H:i", $_POST["datetime"]);
    echo $timestamp; // works!
?>

现在我有一个包含两个字段的表单:日期和时间,分开。

<?php
    $timestamp = DateTime::createFromFormat("d.m.Y", $_POST["date"]);
    echo $timestamp; // works!

    $timestamp = DateTime::createFromFormat("H:i", $_POST["time"]);
    echo $timestamp; // doesn't work (error below)!

    // Edit: 
    /* Fatal error: Call to a member function getTimestamp() on a non-object in */
?>

我想避免将explode() 与mktime() 一起使用。这感觉很脏,我认为可能还有另一种干净的方式。

您将如何根据格式创建时间戳?

提前致谢!

【问题讨论】:

  • 第二个代码有什么问题?
  • @Neal 请查看我刚刚添加到帖子中的致命错误。谢谢!

标签: php datetime timestamp mktime


【解决方案1】:

你不能。时间戳需要一个日期才能计算出来,但没有可用的日期。

【讨论】:

  • 这不是 100% 正确的,createFromFormat() 会将日期的其他字段设置为默认行为中的当前日期/时间(没有 !| 格式修饰符) .见this example
【解决方案2】:

如果您想从$_POST["date"]$_POST["time"] 获取日期和时间,请使用以下

DateTime::createFromFormat("d.m.Y H:i", $_POST["date"]." ".$_POST["time"]);

如果你想知道从午夜到那个特定时间的秒数,你可以使用它,

DateTime::createFromFormat("Ymd H:i", date("Ymd")." ".$_POST["time"]);

【讨论】:

  • 就是这样。我只见树木不见森林。真丢人!
  • 不正确,DateTime::createFromFormat("H:i", $_POST["time"]); 会起作用,但不一定会产生预期的结果。见this example
  • @nickb 谢谢。所以它只适用于 5.3.x 或更高版本。我刚刚删除了声明。 :)
【解决方案3】:

使用日期时间的settime方法

$timestamp = \DateTime::createFromFormat("d.m.Y", '10.10.2012');
$timestamp->setTime(17,12);
var_dump($timestamp);

给予

object(DateTime)#1142 (3) { ["date"]=> string(19) "2012-10-10 17:12:00" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } 

【讨论】:

    猜你喜欢
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多