有很多关于如何转换 LDAP-> Unix 的例子,但我不能像在 Unix-> LDAP 中那样将它转换回来。
这是我为 LDAP->Unix 准备的:
如何将 LDAP 时间戳转换为 Unix 时间戳
http://www.morecavalier.com/index.php?whom=Apps%2FLDAP+timestamp+converter
function LDAPtoUnix($t) {
$secsAfterADepoch = $t / (100000000);
$AD2Unix = ( (1970-1601) * 365 -3 + round((1970-1601)/4) ) * 86400;
return intval($secsAfterADepoch-$AD2Unix);
}
我认为应该是准确的。但是我正在扭曲我那微不足道的小大脑来扭转数学,我无法弄清楚它。我的脑袋正在沸腾,只是为了计算不同时期之间的秒差,然后简单地将它们加/减到给定的时间参数?
有人可以阐明如何反转时间戳吗?
参考: http: //msdn.microsoft.com/en-us/library/windows/desktop/ms679430 (v=vs.85).aspx
除了我的大脑不想计算数学之外,我还问的主要原因是 PHP 的浮点机制似乎没有它需要的那么具体?如果我计算 Unix->LDAP 时间戳,我最终会得到1.3009518089E+17
并且我不确定 Active Directory 是否喜欢这个特定的符号,所以我需要将它存储在一个字符串中,但我不知道如何计算这些大数字,而不是双倍。
目前我有:
printf("%.0f", UnixToLDAP(time()));
这给了我正确的长度,但它并不是很具体。
我需要的
pwdLastSet
适合Active Directory的简短而简单的 Unix->LDAP 时间戳。此外,它必须尽可能完美,我的尝试在检查时并没有很好地结束:http ://www.morecavalier.com/index.php?whom=Apps%2FLDAP+timestamp+converter
谷歌:自动解决方案(Windows 2012 Active Directory)
您可以简单地在 pwdLastSet 中声明 -1,Windows 会自动将时间设置为更改密码后的最后一次登录时间。它并不完美,但它适用于任何在谷歌上搜索并最终来到这里的人。