来自自定义字符串php

时间:2016-03-17 16:09:51

标签: php date unix unix-timestamp

我有一个字母,然后一个月后跟一年:

$followUpDate = 'M12-16'

我分手了一个月和一年:

$datestrip = explode("-", $followUpDate);
$part1     = substr($datestrip[0], 1); // Gives Month
$part2     = $datestrip[1]; // Gives Year

现在我已经分手了一个月和一年。我需要获得上述月份和年份的unix时间戳。

因此,对于此示例,unix时间戳的结果应为1480568400。

提前谢谢!

4 个答案:

答案 0 :(得分:1)

您可以使用DateTime::createFromFormat()(已提及的其他答案)。但是,你必须注意一些细节。

因为您解析了包含部分日期的字符串(仅指定了月份和年份),所以默认情况下,使用当前时间设置其余字段(月,日,时,秒) 。最有可能的是,这不是你想要的。我想你想得到这个月的开始(第1天,午夜)。

您可以通过在format string前面添加感叹号(!)来实现此目的。它将所有日期组件重置为Unix纪元(1970-01-01 00:00:00 UTC)。

此外,DateTime::createFromFormat()的第三个参数是要使用的时区。如果您没有通过它,PHP会使用php.ini中设置的默认时区或最后一次调用date_default_timezone_set()(如果有的话)。这可能是您需要的也可能不是。

$followUpDate = 'M12-16';

// It seems like your timezone is US/Eastern (GMT+5 during the winter)
$timezone = new DateTimeZone('US/Eastern');

// Create a DateTime out of the provided string
// The "!" character in front of the format resets all the fields
// to the Unix epoch (1970-01-01 00:00:00 UTC) before parsing the string
$date = DateTime::createFromFormat('!\Mm-y', $followUpdate, $timezone);

// Display it; it displays 1480568400
echo($date->format("U"));

答案 1 :(得分:0)

查看strtotime

$timestamp = strtotime("2016-12");
echo date("Y-m-d", $timestamp); // prints 2016-12-01

记住你的时区设置;)

您还可以使用php DateTime类来获取更具可读性的方法:

$date = new \DateTime();
$date->setDate(2016, 12, 01);
echo $date->format("Y-m-d"); // similiar to above

答案 2 :(得分:0)

做了一些假设,但以下代码应该适合您:

$followUpDate = 'M12-16';
$d = DateTime::createFromFormat('\Mm-y-d H:i:s', $followUpDate . '-01 00:00:00');

echo $d->format('U');

我绝对建议使用DateTime优于date(),因为它为您提供了额外的灵活性。

答案 3 :(得分:0)

下面是一个小代码片段,可以帮助您快乐:

// Define your date
$followUpDate = 'M12-16'

// Convert your date to a DateTime object
$date = DateTime::createFromFormat('\Mm-y', $followUpdate);

// Output
echo $date->format('Y-m-d');