仅从字符串获取时间时间戳

时间:2019-06-17 08:19:57

标签: php datetime php-carbon

假设我有一个时间字符串“ 9:30”,我想将其转换为时间戳。 我现在要做的是提取它并手动计算时间戳。

list($hour, $minute) = explode(':', '9:30');
$timestamp = $hour * 3600 + $minute * 60;

我想知道是否有使用Carbon或DateTime对象的聪明方法。

2 个答案:

答案 0 :(得分:1)

使用strtotime() manual

$time = '9:30';
$timestamp = strtotime($time);
echo date('H:i',$timestamp);

答案 1 :(得分:0)

我认为您将无法仅从小时或分钟获得时间戳,因为时间戳是1970年1月1日(星期四)00:00:00起的秒数(有关更多详细信息,请查看wikipedia link) 。因此,没有日期部分,您将没有时间戳。您能解释一下您打算如何使用它吗?

如果您打算从给定的日期时间计算出不同的时间戳,则可以采用不同的方法。假设您打算在给定时间后1天或24小时获取时间戳,则可以按照以下方式(非面向对象的方式)进行操作:

$givenTimestamp = strtotime('17-06-2018 09:30:00');
$dayInSeconds = 24*60*60;
$calculatedTimeStamp = $givenTimestamp + $dayInSeconds;

如果您只是想获取时间戳记的时间部分已经经过了几秒钟(例如在给定日期的示例中为9:30),那么您可以这样做:

list($hour, $minute) = explode(':', date ('H:i', strtotime('2018-06-16 09:30:00')));
$secondsSinceStartOfDay = intval($hour)*60*60 + intval($minute) * 60;

在$ hour和$ minute上不使用intval可能会得到相同的结果,但最好在它们上使用intval以避免在某些情况下可能出现的问题。

使用Carbon更新

从Carbon文档中看来,您仍然需要日期部分来生成时间戳。因此,如果您有$ date这样的“ 2018-06-16”和$ time这样的“ 09:30”,那么您可以像这样重新创建日期时间:

$dateTimeString = $date .' '. $time .':00';
$carbonDateTime = Carbon::parse($dateTimeString);
// $carbonDateTime will now have your date time reference
// you can now get the timestamp like this
echo $carbonDateTime->timestamp;