来自自定义字符串的 Unix 时间戳 php
Unix Timestamp from custom string php
我有一串字母,然后是一个月,然后是一年:
$followUpDate = 'M12-16'
我把月份和年份分开:
$datestrip = explode("-", $followUpDate);
$part1 = substr($datestrip[0], 1); // Gives Month
$part2 = $datestrip[1]; // Gives Year
现在我已经把月和年分开了。我需要获取所述月份和年份的 unix 时间戳。
所以对于这个例子,unix 时间戳的结果应该是 1480568400。
提前致谢!
$timestamp = strtotime("2016-12");
echo date("Y-m-d", $timestamp); // prints 2016-12-01
记住您的时区设置 ;)
您还可以使用 php 的 DateTime class:
来寻求更具可读性的方法
$date = new \DateTime();
$date->setDate(2016, 12, 01);
echo $date->format("Y-m-d"); // similiar to above
做了一些假设,但以下代码应该适合您:
$followUpDate = 'M12-16';
$d = DateTime::createFromFormat('\Mm-y-d H:i:s', $followUpDate . '-01 00:00:00');
echo $d->format('U');
我绝对建议使用 DateTime
而不是 date()
,因为它为您提供了额外的灵活性。
下面是一个小代码片段,可以帮助您顺利进行:
// 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');
您可以使用 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"));
我有一串字母,然后是一个月,然后是一年:
$followUpDate = 'M12-16'
我把月份和年份分开:
$datestrip = explode("-", $followUpDate);
$part1 = substr($datestrip[0], 1); // Gives Month
$part2 = $datestrip[1]; // Gives Year
现在我已经把月和年分开了。我需要获取所述月份和年份的 unix 时间戳。
所以对于这个例子,unix 时间戳的结果应该是 1480568400。
提前致谢!
$timestamp = strtotime("2016-12");
echo date("Y-m-d", $timestamp); // prints 2016-12-01
记住您的时区设置 ;)
您还可以使用 php 的 DateTime class:
来寻求更具可读性的方法$date = new \DateTime();
$date->setDate(2016, 12, 01);
echo $date->format("Y-m-d"); // similiar to above
做了一些假设,但以下代码应该适合您:
$followUpDate = 'M12-16';
$d = DateTime::createFromFormat('\Mm-y-d H:i:s', $followUpDate . '-01 00:00:00');
echo $d->format('U');
我绝对建议使用 DateTime
而不是 date()
,因为它为您提供了额外的灵活性。
下面是一个小代码片段,可以帮助您顺利进行:
// 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');
您可以使用 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"));