gpt4 book ai didi

php - Unix 时间戳到 LDAP 时间戳

转载 作者:可可西里 更新时间:2023-11-01 10:00:05 24 4
gpt4 key购买 nike

有很多关于如何转换 LDAP->Unix 的示例,但我无法像在 Unix->LDAP 中那样将它转换回 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()));

这给了我正确的长度,但不是很具体。

我需要什么

简短而简单,适合 Active Directory 中 pwdLastSet 的 Unix->LDAP 时间戳。另外,它必须尽可能完美,我的尝试在检查时并没有很好地结束:http://www.morecavalier.com/index.php?whom=Apps%2FLDAP+timestamp+converter

Google:自动解决方案(Windows 2012 Active Directory)

您只需在 pwdLastSet 中输入 -1,Windows 就会自动将时间设置为更改密码后的最后一次登录时间。它并不完美,但它适用于谷歌搜索并最终到达这里的任何人。

最佳答案

您可以通过正确命名输入参数并在返回前分配一个中间变量来使您的函数更具可读性。由于 $AD2Unix 实际上是一个固定项,它可能是一个常数;现在,我只是将它移到了函数的顶部:

function LDAPtoUnix($ldap_ts) {
$AD2Unix = ( (1970-1601) * 365 -3 + round((1970-1601)/4) ) * 86400;

$secsAfterADepoch = $ldap_ts / 100000000;
$unix_ts = intval( $secsAfterADepoch - $AD2Unix );

return $unix_ts;
}

我们现在有 2 行要反转;它们显然需要以相反的顺序发生,然后使用简单的代数重新排列每个中的术语(/ 变为 *- 变为 +) 我们得到这个:

function UnixtoLDAP($unix_ts) {
$AD2Unix = ( (1970-1601) * 365 -3 + round((1970-1601)/4) ) * 86400;

$secsAfterADepoch = intval( $AD2Unix + $unix_ts );
$ldap_ts = $secsAfterADepoch * 100000000;

return $ldap_ts;
}

几个测试表明这很好地反转了原来的样子。

关于php - Unix 时间戳到 LDAP 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15770879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com