2012年4月9日月曜日

厄介なActiveDirectoryの日付 « 管理人のヒトリゴト -もみんぎゅぅ-



"我々は、バージニア工科大学である"

窒素酸化物は、我々の環境にどのような効果がありますか?

フォレンジック審査官のための専門分野は何ですか






by cmf@ohtan管理人

LINUXなWEBサーバーからLdapを使用してWindows 2003 Server上のActiveDirectoryに接続して、lockoutTimeやlastLogon等の日付を取得してきて、これらをブラウザ上から確認できるようにするPHPスクリプトを仕事で作成したのですが、これがまぁかなりの曲者だったので参考になればと思いここでちょっと紹介したいと思います。

なにが曲者なのかと言いますと、Windows 2003 ServerのActiveDirectory(Windowsすべての日付がそうなのかは不明ですが)上の日付というのは1601年1月1日から100ナノ秒(10000000分の1秒?)間隔というワケのワカラン仕様なのです・・・詳細はコチラ


(´A`).。oO(1601年から起算していったい何がしたいんだろう)

つまりPHPでこれを正しい日付で表示するにはtime()関数の1970年1月1日からの秒(SEC)に変換すればよいので、
・取得した日付を秒(SEC)に変換
・秒(SEC)に変換した日付から1601年1月1日から1969年12月31日までの秒(SEC)を引く
という処理が必要なのです。

●取得した日付を秒(SEC)に変換
$lastLogon = $ATTRS["lastLogon"][0]; //ActiveDirectoryからlastLogonを取得
$lastLogon = floor($lastLogon / 10000000); //lastLogonを秒(SEC)に変換して小数点以下を切り捨て


●秒(SEC)になった$lastLogonから1601年1月1日から1969年12月31日までの秒(SEC)を引く
$lastLogon = $lastLogon – 11644473600;

11644473600という数字が1601年1月1日から1969年12月31日までの秒(SEC)です。
これの算出方法は過去にCmfDiaryのカレンダー機能でその年が閏年かどうかを判定する手法を取り入れたことがあったので、これを応用しました。

閏年は
・4で割り切れて100で割り切れない
・400で割り切れる
というのが条件です。

PHPで書くとこんな感じ
for($SEC = 0,$C = 1601; $C   $SEC += 60 * 60 * 24 * (365 + (($C % 4 == 0 and $C % 100 != 0) or $C % 400 == 0));
}

で最後に



These are our most popular posts:

初心者による初心者のためのEXCELL関数講座 日付・時刻関数

○DATE関数 ~年月日~ =DATE(年,月,日) 『年月日を指定して日付データに』 例) 今日から100日後は何年の何月何日か =DATE(YEAR(TODAY()),MONTH(TODAY()) ,DAY(TODAY())+100 ○TIME関数 ~時刻~ =TIME(時、分、秒) 『時分秒を指定 ... read more

Q. 日付型ってなんですか?扱いにくいからやめたほうがいいって聞いたん ...

なぼなんざ,、しばらくの間は書類書くとき「2001」と書かなければいけない日付欄に「19」 と書いてしまいあわてて修正液を探しておりましたですよ。 ... 実際は100年以上使う かもしれない品物には年を4桁で表示しますからそんなことはないんですが。 ... テキスト 型に、learn more と8桁の数字文字を格納するか、それとも1998/01/01 と入れるか、 それとも 平成10年1月1日 と入力するか、月や日が1桁だった場合頭に0を加えるか・・・ ... read more

Ice Cube「It Was A Good Day」のGood Dayの日付が特定される ...

2012年01月28日 10:42. Ice Cube「It Was A Good Day」のGood Dayの日付が特定 される. 新たな祝日が誕生。 Ice Cubeの代表曲「It Was A Good Day」のGood Dayが 具体的に何年の何月何日だったのかを特定した人物があらわれました。Ice Cubeが ... read more

日数計算(日付-日付) - 高精度計算サイト

異なる日付間の日数、週数、年月数を計算します。 ... 学生/少し役に立った/; 使用目的: 付き合った日から100日目がしりたかったから; ご意見・ご感想: たとえば、 1月1日から 100日目は、 何月何日 ... ご意見・ご感想: 月数の計算だったので、大変助かりました。 read more

Related Posts



0 コメント:

コメントを投稿