2014-01-16 41 views
1

不知道这是否已被回答,但我做了谷歌搜索,并没有找到任何有用的东西。PHP:从表格选择转换回时间()格式选择


我有这对于月,日,年,小时和分钟表单中选择字段(第二个是永远00)和下面的HTML代码(作为一个例子),我需要将其转换回时间()格式提交。我将如何做到这一点与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 --> 

注意:如果需要,每个选择的值可能会更改。不知道他们需要什么格式才能有效地完成这项工作。

+0

andwhere是你的PHP? – 2014-01-16 19:43:27

+0

我不知道该怎么做,所以我不知道从哪里开始的PHP。 – kdjernigan

+0

我不知道转换方法将其转换回time()格式。 – kdjernigan

回答

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 
+0

是我的值好吗这种方法?月:xx日:xx年:xxxx小时:xx分钟:xx ?? – kdjernigan

+1

是的,'strtotime()'(或字符串方法中的任何DateTime)非常健壮。默认格式为'YYYY-mm-dd HH:ii:ss',这是您的格式。 – Sam

+0

http://jsfiddle.net/Be22G/1/此处的代码返回以下错误:致命错误:带有消息'DateTime :: __ construct()的未捕获异常'异常':解析时间字符串失败(2015-03 - 02:02)位置7( - ):意外字符'in /home/****/public_html/datetime.php:10堆栈跟踪:#0/home/****/public_html/datetime.php( 10):DateTime - > __ construct('2015-03- 02:02')#1 {main}扔在/home/****/public_html/datetime.php在第10行# – kdjernigan

1

使用strtotime功能。

echo strtotime("10 September 2000"); // output 968569200 of unix timestamp 
3
$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(); 
+0

与time()的格式是否相同?只是想检查,因为我的代码在内部使用time()。 – kdjernigan

+2

'time()'返回一个unix时间戳,是的。 – MueR

+0

Doh,要连接那些:)将修复 – MueR