$dateLargeInt= "1.29265206716E+17"; // nano seconds since jan 1st 1601
$secsAfterADEpoch = $dateLargeInt / (10000000); // seconds since jan 1st 1601
$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
9条答案
按热度按时间nr7wwzry1#
请看这里。
实际上,它可以归结为将
FILETIME
时间戳转换为UNIX时间戳:raogr8fs2#
而不是对另一种语言问同样的问题。
gupuwyp23#
详情请参见http://php.net/manual/en/ref.ldap.php
zfciruhq4#
@陌生人-更正:时间戳应从1601开始,而不是1600。请参阅Microsoft官方网站:http://msdn.microsoft.com/en-us/library/ms675243%28v=vs.85%29.aspx
4xrmg8kj5#
this page表示“自1.1.1601 00:00:00以来已通过100纳秒单位”,这可能会有所帮助。
编辑:1600至1601
siotufzp6#
NodeJS /浏览器JS:
7tofc5zh7#
猛击
如果字符串包含18位或更多位,则此数字将转换为+%D_%T格式的日期。如果超过18位,则转换将不正确。如果字符串不包含18位或更多位,则以其原始形式显示。
pkln4tw68#
LDAP中的当前时区为0。如果要增加或减少时区,则需要遵循公式60秒乘以60分钟乘以X小时(60 * 60 * X)= Y将获得秒数。X是您要增加或减少的时区。如果您要增加时区,使用($ ADToUnixConverter += Y),否则使用($ ADToUnixConverter -= Y)。
qq24tv8q9#
PHP解决方案
基于这个答案https://stackoverflow.com/a/67992361/1936720,可以在PHP中使用