1

我正在使用 PHP 脚本使用 LDAP 从 Active Directory 中获取数据。

当我得到“lastlogon”的用户值时,我得到一个像 129937382382715990 这样的数字

我试图弄清楚如何从中获取日期/时间,但不知道,有人可以帮忙吗?

4

4 回答 4

3

在PHP:LDAP 函数页面上阅读此评论。

它们都使用“间隔”日期/时间格式,其值表示自 1601 年 1 月 1 日(UTC,0 或 0x7FFFFFFFFFFFFFFF,9223372036854775807 表示帐户永不过期)以来的 100 纳秒间隔数:https://msdn.microsoft.com/en-us/library/ms675098(v=vs.85).aspx

因此,如果您需要将其从/转换为 UNIX 时间戳,您可以通过以下方式轻松计算差异:

<?php
$datetime1 = new DateTime('1601-01-01');
$datetime2 = new DateTime('1970-01-01');
$interval = $datetime1->diff($datetime2);
echo ($interval->days * 24 * 60 * 60) . " seconds\n";
?>

两个日期之间的差异是 11644473600 秒。不要依赖浮点计算或其他可能计算错误的数字(包括时区或类似的东西)。

现在您可以从 LDAP 字段转换:

<?php
$lastlogon = $info[$i]['lastlogon'][0];
// divide by 10.000.000 to get seconds from 100-nanosecond intervals
$winInterval = round($lastlogon / 10000000);
// substract seconds from 1601-01-01 -> 1970-01-01
$unixTimestamp = ($winInterval - 11644473600);
// show date/time in local time zone
echo date("Y-m-d H:i:s", $unixTimestamp) ."\n";
?>
于 2012-10-03T11:57:43.200 回答
1

这是自 1601 年 1 月 1 日 00:00:00 UT 以来的 100 纳秒滴答数。

维基百科中的系统时间文章可以为您提供更多详细信息。

于 2012-10-03T11:57:33.887 回答
0

那这个呢:

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

编辑 - - -

我刚刚尝试了以下方法,并注意到除非您机器上的时钟设置在未来 10 年,否则此方法将不起作用。下面是我用来证明上述内容几乎没有用的代码,除非你做更多的处理可能......

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

echo "<br />";

$timeStamp = 129937382382715990;
echo date('Y-m-d H:i:s', $timeStamp);  
于 2012-10-03T12:05:48.183 回答
0

就我而言,我使用的是 Pentaho。使用 aModified Javascript value您可以转换值,lastLogon是我要从数据流转换的列:

calendar = java.util.Calendar.getInstance();

calendar.setTime(new Date("1/1/1601"));
base_1601_time = calendar.getTimeInMillis();

calendar.setTime(new Date("1/1/1970"));
base_1970_time = calendar.getTimeInMillis();

ms_offset = base_1970_time - base_1601_time;

calendar.setTimeInMillis( lastLogon / 10000 - ms_offset); //lastLogon is a column from stream
var converted_AD_time = calendar.getTime(); // now just add this variable 'converted_AD_time'  to the 'Fields' as a show in the image below

在此处输入图像描述

于 2021-07-08T17:39:35.013 回答