【发布时间】:2013-04-02 17:53:21
【问题描述】:
有很多关于如何转换 LDAP->Unix 的例子,但是我不能像在 Unix->LDAP 中那样将它转换回来..
这是我为 LDAP->Unix 准备的:
How to convert LDAP timestamp to Unix timestamp
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()));
这给了我正确的长度,但不是很具体。
我需要什么
简短而简单,
Unix->LDAP 时间戳,适合 Active Directory 中的 pwdLastSet。
另外,它必须尽可能完美,我的尝试在检查时并没有很好地结束:http://www.morecavalier.com/index.php?whom=Apps%2FLDAP+timestamp+converter
Google:自动解决方案(Windows 2012 Active Directory)
您可以在 pwdLastSet 中简单地声明 -1,Windows 将自动将时间设置为密码更改后的最后一次登录。它并不完美,但它适用于任何使用谷歌搜索并在这里结束的人。
【问题讨论】:
标签: php windows unix time ldap