Php 18位时间戳?

Php 18位时间戳?,php,xml,timestamp,Php,Xml,Timestamp,我正在开发一个与电视录制相关的系统 我正在从另一个系统(我没有文档)解析以下xml: 我的问题是,有人能识别StartTime和StopTime属性的时间戳格式吗?我认为秒的时间戳通常有10个数字,那么其他8个数字是从哪里来的呢?我的猜测有点像时区和毫秒精度 我使用的是php,所以用一种特定于php的方式将其转换为datetime会很好,但一切都很好。它看起来像C#的datetime滴答声: DateTime值类型表示 值范围为的日期和时间 从1月1日午夜12:00:00开始, 0001安诺

我正在开发一个与电视录制相关的系统

我正在从另一个系统(我没有文档)解析以下xml:


我的问题是,有人能识别StartTime和StopTime属性的时间戳格式吗?我认为秒的时间戳通常有10个数字,那么其他8个数字是从哪里来的呢?我的猜测有点像时区和毫秒精度

我使用的是php,所以用一种特定于php的方式将其转换为datetime会很好,但一切都很好。

它看起来像C#的datetime滴答声:

DateTime值类型表示 值范围为的日期和时间 从1月1日午夜12:00:00开始, 0001安诺·多米尼(普通时代)至 公元9999年12月31日下午11:59:59。 (C.E.)

这一行:

Console.WriteLine (new DateTime (633936042047633656));
印刷品:

2009年11月12日上午6:30:04


如果您需要将这些数字转换为Unix时间,请减去62135596800000000L,这是Unix纪元,用记号表示。

使用安装在php中的gmp库,您可以这样做:

$epoch     = '621355968000000000';
$newtime   = gmp_sub($dateTime, $epoch);
$newtime   = gmp_div($newtime, '10000000');
$timestamp = gmp_strval($newtime);
现在你有约会了:

echo date('Y-m-d H:i:s', $timestamp);

从历元开始计算毫秒的时间戳当前有10位数字。一旦“现在”时间戳有3/4/5/6/etc位。嗯,在PHP中没有64位int,这可能是一个问题:P哦,我会找到一种方法。用32位做这个数学应该不会太难,用一点字符串预处理。首先通过删除字符串的最后6个字符将“除以”一百万,然后删除前导的“6”。接下来从字符串的第一个数字中减去2。现在将剩下的数转换为32位整数,然后减去1355968000。
echo date('Y-m-d H:i:s', $timestamp);
$dateLargeInt= "131424999530821857";
$secsAfterADEpoch = $dateLargeInt / (10000000); 
$ADToUnixConvertor=((1970-1601) * 365.242190) * 86400;
// unix epoch - AD epoch * number of tropical days * seconds in a day 
$unixTsLastLogon=intval($secsAfterADEpoch-$ADToUnixConvertor); 

// unix Timestamp version of AD timestamp
$lastlogon=date("d-m-Y", $unixTsLastLogon); // formatted date

echo $lastlogon;