「更新日の三年後」列を作りたい
お馴染み SharePoint FAN からのネタです。リストやライブラリで、登録されたアイテム(ファイル)の最終更新日から三年後の日付を表示する列を作成します。素直に考えれば、集計値列を作成して関数を使えば簡単にできそうです。
=更新日時+1095
しかし、実際にこの関数を入力してみるとバグります。三年後とは全く違う日付に変換されてしまうのです。規則性はよく判りません。
他のパターンも試してみました。
※2/19 katomachaさんのご指摘で以下を修正
=DATE(YEAR(更新日時)+3,MONTH(更新日時),DAY(更新日時))
=DATE(YEAR(更新日時),MONTH(更新日時)+36,DAY(更新日時))
=DATE(YEAR(更新日時),MONTH(更新日時),DAY(更新日時)+1095)
いずれも期待した値が返りました。
しかし、SharePoint FAN によると、WSS3.0 環境ではこのパターンでも駄目だったそうです。不思議です…。ちなみに「作成日の三年後」の場合、この現象は起こりませんでしたが、これも MOSS 環境でのみ確認していますので、WSS では不明です。
SharePoint Fan
WSS3.0でビューに有効期限をつけたい
AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
いつも拝見させていただいております。
私の環境ではちゃんと期待した値が帰ってきました。
駄目となっている式が間違えているような気がします。
×:DATE(YEAR(更新日時+3),MONTH(更新日時),DAY(更新日時))
○:DATE(YEAR(更新日時)+3,MONTH(更新日時),DAY(更新日時))
AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 2.0.50727) Sleipnir/2.5.12
どうも!
…あっ、+3の位置が間違ってますね!
なんてこった。
記事のほうを訂正させていただきます〜
AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
私も更新日時の場合うまくいかなかった記憶があります。式を設定してコンテンツを編集し、保存するとおかしな値になります。更新日時=日付連番の初期値 で計算されるようです。
・保存が行われる前は更新日時は日付連番の初期値になっている
・保存される前に式が計算される
・保存が行われた段階で正確な更新日時となる
と思っているのですが・・・
AGENT: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322) Sleipnir/2.5.12
strangeloveさん、どうも。
更新日時の扱いは内部的にはどうなっているんでしょうね。
私はまだドキュメントライブラリでしか試してないのですが、リストアイテムでも試してみようと思います。
ときに「日付連番の初期値」ってなんでしょう(汗)
AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
すいません。
上の私のコメントですが、リストでは問題なく、ドキュメントライブラリで起こる現象のようです。
AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
またまたすいません。
ちょっと違っていたようです。
日付連番は日付をシリアル番号であらわしたものです。MOSSでは1899/12/31が1で、日付をおうごとに番号が大きくなります。
今回のバグ?は、
1.保存が行われる前は更新日時は日付連番が0(1899/12/30相当)になっている?
・保存される前に式が計算されるが、その際2.なぜか年に1900年が追加され(3799/12/30になる)、この値をもとに式が計算される?
3.保存が行われた段階で、正確な日時が更新日時に入力される。
と言うように見えます。
内部が本当の所どうなっているかは、ユーザーの私にはぜんぜんわからないので、あくまでも現象から追った予\想でしかありませんが・・・
AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
めちゃくちゃになってしまいました。板汚し申\し訳ありません。
以下書き直しです。
1.保存が行われる前は更新日時は日付連番が0(1899/12/30相当)になっている?
2.保存される前に式が計算されるが、その際、なぜか年に1900年が追加され(3799/12/30になる)、この値をもとに式が計算される?
3.保存が行われた段階で、正確な日時が更新日時に入力される。
です。
AGENT: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
お疲れ様です
あ、更新日時でやるとなんですね・・・
記事ちゃんと見てませんでした
こちらで試したのは[today]に対して計算させてました・・・
明日更新日時で試してみます
AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 2.0.50727) Sleipnir/2.5.12
strangeloveさま、katomachaさま、ありがとうございます。大分現象が見えてきた気がします!…見えても対処できないのがナンですが(笑)MSのバグフィックス待ちですね。
AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
お疲れ様です
ドキュメントライブラリに対してのみ再現できました。
どうやら理屈はstrangeloveさんの説明どおりですね
なお、ワークフローを使って演算して値を列に書き込むようにすれば対処もできました
AGENT: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322) Sleipnir/2.5.12
なるほど、ワークフローと言うアプローチは考えませんでした。
検証ありがとうございまっす!
AGENT: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.5.21022; MS-RTC LM 8)
閏年を考えると、日付で計算した方法のみが選択肢として残ると思います。
=DATE(YEAR(更新日時),MONTH(更新日時),DAY(更新日時)+1095)
AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 2.0.50727) Sleipnir/2.5.12
yamaさん、どうも。
閏年!
…考えにありませんでした(汗)
そうですね、ご指摘ありがとうございます。