初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2014-02-07 09:53:03

なり
Member

指定した日の前日の計算

データをある期間だけ検索する為、指定した日付、時間に対して
一日前の日付、時間を計算しようとしましたが上手くいきません。
教えてください。

検索で A::検査日時 を指定したとします。
この日付けが $date = 2014/02/07 5:00:00 です。
そのとき $date1 = 2014/02/06 5:00:00 として

<= $date1 >=$date の期間で検索したいのです。

よろしくお願いします。

Offline

#2 2014-02-07 10:03:23

barikan
Guest

Re: 指定した日の前日の計算

範囲検索は...を使います。

$date1 & "..." & $date

#3 2014-02-07 10:08:06

なり
Member

Re: 指定した日の前日の計算

barikanさん

ありがとうございます。

$date1の計算方法も教えていただけないでしょうか?

Offline

#4 2014-02-07 10:08:53

チポ
Member

Re: 指定した日の前日の計算

前日の計算法ですよね、

タイムスタンプは秒数の数字が値となっていますから、1日の秒数を引けばいいでしょう。

  タイムスタンプ - 24*60*60

Offline

#5 2014-02-07 10:31:23

なり
Member

Re: 指定した日の前日の計算

チポさん

ありがとうございます。
やってみました。

$date は 2014/02/07 5:00:00 なのですが

$date1 = $date - 24*60*60 とすると

答えは?が出てきます。

どこが間違っているのでしょうか?教えてください。
よろしくお願いします。

Offline

#6 2014-02-07 10:45:28

tim
Guest

Re: 指定した日の前日の計算

$dateがテキストなのでは。
設定する時GetAsTimestampを使う。

#7 2014-02-07 11:24:51

なり
Member

Re: 指定した日の前日の計算

timさん

ありがとうございます。

$date = 記録::検査日時の「記録::検査日時」のフィールドはタイムスタンプになっています。

今回教えていただいたように GetAsTimestamp($date) とすると 答えは?になってしまいます。
GetAstext($date)とすると 2014/02/07 5:00:00 と出てきます。

$dateがタイムスタンプであれば $date - 24*60*60 という計算は可能なんでしょうか?

上手くいきません。なにが問題なのか教えてください。よろしくおねがいします。

ちなみに

$date - 1 だと ?

-24*60*60 だけだと -86400 が出てきます。

Offline

#8 2014-02-07 11:27:59

チポ
Member

Re: 指定した日の前日の計算

変数のタイプはテキストなんですよね。

ですから、

$date1 = $date - 24*60*60

としないで、
   $date1 = A::検査日時 - 24*60*60
とすれば、
   $date1 & "..." & $date
このままでいいのでは。

Offline

#9 2014-02-07 11:52:55

なり
Member

Re: 指定した日の前日の計算

チポさん

ありがとうございます。

$date1 = A::検査日時 - 24*60*60にしましたが

$date1 は ? になってしまいました。

$date1 = GetAsTimestamp ( "2014/02/07 5:00:00" )
にしましたが
なぜか 2014/02/07 5:00 と表示されました。

$date1の設定がおかしいのかもしれません。

Offline

#10 2014-02-07 12:23:12

tim
Guest

Re: 指定した日の前日の計算

>なぜか 2014/02/07 5:00 と表示され
日時をテキスト変換する場合の書式はOS環境やファイルを作った時の環境によるので、それであってます。

検索値の指定は、最初に「この日付が」と言ってるから現在のレコードのフィールド値でいいのかなあ?

A::検査日時が正しいタイムスタンプ値になってない?

#11 2014-02-07 14:50:47

なり
Member

Re: 指定した日の前日の計算

timさん

ありがとうございます。

検索値に入力する際、気になっていたのですが、

「2014/02/07 5:00:00.*」となっている(なってしまう)のですが

最後の「.*」は問題ありませんか?

よろしくお願いします。

Offline

#12 2014-02-07 14:57:14

tim
Guest

Re: 指定した日の前日の計算

ありません。上の方だけ(日付だけとか)入れると、下は任意という記号*が自動補完されます。
その入力で検索されますか?

検索条件に「?」を入れて検索すると何か該当しませんか。

#13 2014-02-07 15:08:06

なり
Member

Re: 指定した日の前日の計算

timさん

検索されません。

検索条件が該当しないという警告が出てきます。

Offline

#14 2014-02-07 15:29:35

チポ
Member

Re: 指定した日の前日の計算

疑問にお答えが有りませんよ。

  A::検査日時
がタイムスタンプフィールドになっていて、正しい値が入力されている?


変数を設定で
  $date = A::検査日時
  $date1 = A::検査日時 - 24*60*60
としている?

それで、
フィールド設定で
  $date1 & "..." & $date
としている?

この時点で、検索フィールドの値を見てください。

Offline

#15 2014-02-07 15:34:50

tim
Guest

Re: 指定した日の前日の計算

データには問題ないみたいなので、

変数を設定[$date;A::検査日時]
検索モードに切り替え[]
フィールド設定[A::検査日時;($date-86400)&".."&$date]
検索実行[]

でいいと思うんだけど

$date1 = A::検査日時 - 24*60*60にしましたが

$date1 は ? になってしまいました。

は、どこで見てるんでしょうか。データビューア?

#16 2014-02-10 09:00:20

なり
Member

Re: 指定した日の前日の計算

tim さん

ありがとうございます。

やってみました。

しかし まず,
ダイアログボックスに「この検索条件に一致するレコードがありません」と出てきます。
そこで検索条件変更のボタンを押すと
「?...2014/01/30 5:00:00.*」が出てきます。

$dateの部分は入力した通り 「2014/01/30 5:00:00.*」と出ており、
問題ないと思います。

ちなみにデータビューアというものを知りませんので、$date1をダイアログボックスに表示して
確認しております。

よろしくお願いします。

Offline

#17 2014-02-10 09:26:37

wader
Member

Re: 指定した日の前日の計算

データビューアはAdvanced版の機能です。
特定のバージョンのバグかな?
フィールド設定[A::検査日時;(GetAsTimestamp($date)-86400)&".."&$date]
で対処できるかなあ?

Offline

#18 2014-02-10 10:22:33

なり
Member

Re: 指定した日の前日の計算

Wanderさん

ありがとうございます。

変数を設定 [$date; 値:Get( タイムスタンプ )]
変数を設定 [$date1; 値:($dt - 86400) & "..." & $dt]
とすれば

出来ました。

しかしながら 現時点の日時はOKですが

日時を指定して検索する方法がわかりません。

よろしくお願いします。

Offline

#19 2014-02-10 10:34:54

wader
Member

Re: 指定した日の前日の計算

timさんのでやってるように、Get( タイムスタンプ )の代りにフィールドを指定すればいいです。
検索モードにする前に代入。
>$dateの部分は入力した通り 「2014/01/30 5:00:00.*」と出ており、
変数は$dateの1個しか使いませんけど、2個使ってやりませんでした?
代入してない変数を使うと計算結果がマイナスになって、不正タイムスタンプ=?で表記されます。

「現在のレコードのフィールド値で検索」でいいんですか。
「指定する」なら、普通はダイアログを出すとか検索モードで一時停止してユーザに入力させると思いますけど。

Offline

#20 2014-02-10 10:35:13

なり
Member

Re: 指定した日の前日の計算

Wondarさん

すみません。

変数を設定 [$date; 値:Get( タイムスタンプ )]
変数を設定 [$date1; 値:($date - 86400) & "..." & $date]

です。間違ってました。

Offline

#21 2014-02-10 11:09:52

なり
Member

Re: 指定した日の前日の計算

Wanderさん

下記のように変更しました。

おっしゃるように検索モードで一時停止してユーザーに入力してもらうように下記のようにしました。

フィールドへ移動 「A::検査日時」
検索モードに切り替え[一時停止]
変数を設定 [$date; 値:A::検査日時 ]
フィールド設定 [A::検査日時; 値:($date - 86400) & "..." & $date]
検索実行[]

にしましたが

ダイアログボックスに「この検索条件に一致するレコードがありません」と出てきます。
そこで検索条件変更のボタンを押すと
「?...2014/01/30 5:00:00.*」が出てきます。

そこで

$dateがタイムスタンプデータになっていないのではと思い

変数を設定 [$date; GetAsTimestamp (値:A::検査日時) ]
にしたところ

「?...?」になりました。

よろしくお願いします。

Offline

#22 2014-02-10 11:28:56

なり
Member

Re: 指定した日の前日の計算

Wanderさん


変数を設定 [$date; 値:Get( タイムスタンプ )]
変数を設定 [$date1; 値:($date - 86400) & "..." & $date]

上記ですと 上手くいきますが

フィールド設定 [A::検査日時; 値:Get( タイムスタンプ )]
変数を設定 [$date; 値:A::検査日時 ]
フィールド設定 [A::検査日時; 値:($date - 86400) & "..." & $date]
検索実行[]

とすると ?が出てしまいます。

検索を一時停止してフィールドに値を入力しないでタイムスタンプデータを
入力する方法はないでしょうか?

Offline

#23 2014-02-10 11:47:48

なり
Member

Re: 指定した日の前日の計算

Wanderさん

ダイアログボックスから入力して入力する方法にしましたがやはり ? が出ます。

カスタムダイアログを表示["検査日時入力";"検査日時を入力してください。";A::検査日時]
フィールド設定 [A::検査日時; 値:(A::検査日時 - 86400) & "..." & A::検査日時]

やはり「?...2014/01/30 5:00:00.*」が出てきます。

よろしくお願いします。

Offline

#24 2014-02-12 10:57:14

tim
Guest

Re: 指定した日の前日の計算

まず、既存のフィールド値で検索するんでなければ、タイムスタンプを入力しないといけません。
しかし、検索モードで(一時停止でもダイアログでも)入力すると、省略部分は補完されますけど、それはあくまで「検索条件」なんで、正しいタイムスタンプではありません。(日時計算に使えない)
秒まで入れても小数が補完されるというのは、迷惑な仕様ですね...いつからこうなのかな。

とりあえず、入力用のグローバルフィールドを使うのが手っ取り早いのでは。
ブラウズモードに切り替え[]
カスタムダイアログ[グローバルへ入力]
検索モードに切り替え[]
フィールド設定[A::検査日時; 値:(A::グローバル - 86400) & "..." & A::グローバル]
検索実行[]

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 567.22 KiB (Peak: 587.76 KiB) ]