【问题标题】:PHP: Convert back to time() format from form selectPHP:从表单选择转换回 time() 格式
【发布时间】:2014-01-17 04:12:03
【问题描述】:

不确定这是否已经得到解答,但我确实做了谷歌搜索,并没有真正找到任何有用的东西。


我有以下 html 代码(例如),它有一个用于月、日、年、小时和分钟的表单选择字段(秒总是 00),我需要将其转换回 time() 格式表单提交。我将如何使用 php 执行此操作?

<select name="month">
    <option value="01">January</option>
    <option value="02">February</option>
    <option value="03">March</option>
    ...
</select>

<select name="day">
    <option value="01">1</option>
    <option value="02">2</option>
    <option value="03">3</option>
    ...
</select>

<select name="year">
    <option value="2014">2014</option>
    <option value="2015">2015</option>
    ...
</select>

<select name="hour">
    <option value="00">12am</option>
    <option value="01">1am</option>
    <option value="02">2am</option>
    <option value="03">3am</option>
    <option value="12">12pm</option>
    <option value="13">1pm</option>
    ...
</select>

<select name="minute">
    <option value="01">1</option>
    <option value="02">2</option>
    <option value="03">3</option>
    ...
</select>

<!-- second is always 00 -->

注意:每个选择的值可以根据需要更改。不确定他们需要采用什么格式才能有效地进行这项工作。

【问题讨论】:

  • 你的 php 在哪里?
  • 我不知道该怎么做,所以我不知道从哪里开始 php。
  • 不知道这个转换回time()格式的转换方法。
  • mktime?或者DateTime::setDate & DateTime::setTime,如果你愿意的话。

标签: php


【解决方案1】:
$time = DateTime::createFromFormat(
    'Y-m-d H:i:s',
    sprintf("%d-%d-%d %d:%d:%d",
        intval($_POST['year']),
        intval($_POST['month']),
        intval($_POST['day']),
        intval($_POST['hour']),
        intval($_POST['minute']),
        0
    )
);

你现在有了一个 DateTime 对象,来获取一个 unix 时间戳:

$timestamp = $time->getTimestamp();

【讨论】:

  • 这和 time() 的格式一样吗?只是想检查一下,因为我的代码在内部使用 time()。
  • Doh, ment 连接那些 :) 将修复
【解决方案2】:

查看strtotime()DateTime 类。

<?php
$date = $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'];
$time = $_POST['hour'] . ':' . $_POST['minute'];

// Simple way to get a Unix timestamp from a date string
$timestamp = strtotime($date . ' ' . $time);

// To do more modifications to the date, you should use the DateTime class
$dateObj = new DateTime($date . ' ' . $time);
$dateObj->modify('+1 year'); // Adds a year to the date
$timestamp = $dateObj->format('U'); // Returns the date as a Unix timestamp

【讨论】:

  • 我的价值观是否适合这种方法?月:xx 日:xx 年:xxxx 时:xx 分:xx ??
  • 是的,strtotime()(或任何来自字符串方法的 DateTime)非常健壮。默认格式是YYYY-mm-dd HH:ii:ss,这正是您的格式。
  • jsfiddle.net/Be22G/1 此处的代码返回以下错误:Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (2015-03- 02:02) at position 7 (-): Unexpected character' in /home/****/public_html/datetime.php:10 Stack trace: #0 /home/****/public_html/datetime.php(10): DateTime-&gt;__construct('2015-03- 02:02') #1 {main} thrown in /home/****/public_html/datetime.php on line 10
  • 对不起@kdjernigan,$_POST['date'] 应该是$_POST['day']。这可以通过看到我们通过2015-03- 02:02 来调试(它错过了这一天)。
  • 是的,我也看到了。我在您的帖子中看到了它,但忘记在代码中更改它。谢谢你的收获。
【解决方案3】:

使用strtotime 函数。

echo strtotime("10 September 2000"); // output 968569200 of unix timestamp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 2012-06-05
    • 1970-01-01
    • 2020-12-13
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多