比较时间(毫秒和没有日期)

时间:2013-06-13 14:21:50

标签: php date time

我正在解析字幕文件(srt格式),这是一个对话线的例子:

27
00:01:32,400 --> 00:01:34,300
Maybe they came back
for Chinese food.

时间格式为

hours:minutes:seconds,milliseconds

我想操纵这些时间并进行比较,但我遇到的各种PHP类似乎都不支持毫秒。


我的问题:

我想做的一件事就是解析同一篇媒体的2个字幕文件(例如同一部电影,或同一部电视剧等),并比较每个字幕文件的相同行的文字。对话。问题是相同行的开始和结束时间将略微偏离几百毫秒。例如,在上面的行中,在另一个字幕文件中,该行的时间是

00:01:32,320 --> 00:01:34,160

获取这两个文件'同一行对话的版本,您可以检查文件2中是否有一行在文件的开始和结束时间的几百毫秒内,并且应该捕获它。这样的事情。所以我需要通过向它们添加毫秒来操纵时间,并且还要对这些时间进行比较。

2 个答案:

答案 0 :(得分:2)

假设您使用PHP> = 5.3(getTimestamp()所需),这将有效:

$unformatted_start = '00:01:32,400';
$unformatted_end = '00:01:34,300';

// Split into hh:mm:ss and milliseconds
$start_array = explode(',', $unformatted_start);
$end_array = explode(',', $unformatted_end);

// Convert hh:mm:ss to DateTime
$start  = new DateTime($start_array[0]);
$end = new DateTime($end_array[0]);

// Convert to time in seconds (PHP >=5.3 only)
$start_in_seconds = $start->getTimestamp();
$end_in_seconds = $end->getTimestamp();

// Convert to milliseconds, then add remaining milliseconds
$start_in_milliseconds = ($start_in_seconds * 1000) + $start_array[1];
$end_in_milliseconds = ($end_in_seconds * 1000) + $end_array[1];

// Calculate absolute value of the difference between start and end
$elapsed = abs($start_in_milliseconds - $end_in_milliseconds);

echo $elapsed; // 1900

答案 1 :(得分:0)

您是否尝试过strtotime

if (strtotime($date1) > strtotime($date2)) { # date1 is after date2
    # do work here
} 
if (strtotime($date1) < strtotime($date2)) { #date2 is after date1
    # do other work here
}