トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   とにかくFLASH【FLASHに関して全般】
     日付の加算について質問です
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
natoshin
Åê¹ÆNo.24995
投稿日時: 2006-4-20 15:45
新米
居住地: 新宿
投稿: 20
使用環境:
windowsXP,
Flash MX 2004 pro,
ColdFusion MX,
Dreamweaber MX 2004,
Mozilla FireFox, IE
日付の加算について質問です
いつもお世話になっております。
natoshinです。
ある日付(YYYYMMDDhhmmss形式)の数時間後の
日付(YYYYMMDDhhmmss形式)を算出したいのですが
上手くいきません。

なんぞいい方法はないもんでしょうか?
野中文雄
Åê¹ÆNo.24996
投稿日時: 2006-4-20 15:57
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 日付の加算について質問です
本題に入る前に、「エクセルファイルのダウンロードについて」は解決したのでしょうか?

ご質問につきましては、「上手くいきません」はご説明になりません。どういう意図で、どのような処理をして、どういった結果になったのでしょうか?
引用:
natoshinさんは書きました:
ある日付(YYYYMMDDhhmmss形式)の数時間後の
日付(YYYYMMDDhhmmss形式)を算出したいのですが
上手くいきません。


----------------
 

natoshin
Åê¹ÆNo.25000
投稿日時: 2006-4-20 17:47
新米
居住地: 新宿
投稿: 20
使用環境:
windowsXP,
Flash MX 2004 pro,
ColdFusion MX,
Dreamweaber MX 2004,
Mozilla FireFox, IE
Re: 日付の加算について質問です
説明の方、ご指摘の通り不十分ですいませんでした。

詳細といたしましては
ある処理の開始日付(YYYYMMDDhhmmss形式)と予想処理時間を
DBより取得して、その予想終了日付(YYYYMMDDhhmmss形式)を
取得するといった処理があるのですが、上手く日付が
加算されません。

以下、当該プログラム部分です。
// 直前の処理開始日付・時間および終了日付・時間を「YYYY/MM/DD/hh/mm/ss」のフォーマットへ変換し、変数に格納
procLastStrDateTime = lStrYear + "/" + lStrMonth + "/"
+ lStrDay + "/ " + lStrHour + "/ " + lStrMinute;
procLastEndDateTime = lEndYear + "/" + lEndMonth + "/"
+ lEndDay + "/" + lEndHour + "/ " + lEndMinute;

// 日付型に変換し、変数に格納
procLastStrDateTime = makeDateTime(procLastStrDateTime);
procLastEndDateTime = makeDateTime(procLastEndDateTime);

// 「終了時間 - 開始時間」で処理時間を算出し、変数に格納
diffDateTime = procLastEndDateTime.getTime() - procLastStrDateTime.getTime();

// 1件あたりの処理時間を計算
// ※lCnt:DBより取得した処理対象件数
perTime = Math.round(diffDateTime / lCnt);

// 予想終了時間を算出
forcastProcTime = perTime * nCnt;

// 「最新の処理開始日付・時間 + 予想処理時間」で予想処理終了日付・時間を算出
procStrDateTime = nStrYear + "/" + nStrMonth + "/" + nStrDay + "/ " + nStrHour + "/ " + nStrMinute;
procStrDateTime = makeDateTime(procStrDateTime);
procStrDateTime = procStrDateTime.getTime();
forcastEndDateTime = procStrDateTime + forcastProcTime;
forcastEndDateTime = new Date(forcastEndDateTime);

function makeDateTime(procDateTime) {
// 文字列を日付に変換
var tmp = procDateTime.split("/");
return new Date(tmp[0], tmp[1], tmp[2], tmp[3], tmp[4]);
}

再度、宜しくお願い致します。

なお、「エクセルファイルのダウンロード」につきましては
結局、解決しなかったため他の方法をとりました
(WEB上で動的に作成せず、バッチであらかじめ作成し、
作成したファイルにリンクを貼りダウンロードするという
静的なやり方をとりました)。

野中文雄
Åê¹ÆNo.25004
投稿日時: 2006-4-20 18:52
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 日付の加算について質問です
お答えになっていません。

具体的に(1)どういう値を使って、(2)どういう処理結果が得られるべきところ、(3)どのような意図しない結果になるのでしょうか?

たとえば、(3)については何も起こらない(値が返らない)、undefinedあるいはNaNが返る、エラーが発生する、まったく違う値になるなどが考えられます。それらの具体的な現象に照らして、値が渡されているのか、正しく処理が流れているのか、関数は呼ばれているのか、計算や処理のステートメントに誤りはないのかを、個別に検討する必要があります。
引用:
natoshinさんは書きました:
詳細といたしましては...[中略]...上手く日付が
加算されません。

上述のような検討を行うためには、適切に問題の切分けと絞込みがされていなければなりません。引用のスクリプトは、少なくとも以下の程度まで絞込めるはずです。
// 直前の処理開始日付・時間および終了日付・時間を「YYYY/MM/DD/hh/mm/ss」のフォーマットへ変換し、変数に格納
// procLastStrDateTime = lStrYear+"/"+lStrMonth+"/"+lStrDay+"/ "+lStrHour+"/ "+lStrMinute;
// procLastEndDateTime = lEndYear+"/"+lEndMonth+"/"+lEndDay+"/"+lEndHour+"/ "+lEndMinute;
// 日付型に変換し、変数に格納
// procLastStrDateTime = makeDateTime(procLastStrDateTime);
procLastStrDateTime = makeDateTime("2006/04/20/09/00/00");
// procLastEndDateTime = makeDateTime(procLastEndDateTime);
procLastEndDateTime = makeDateTime("2006/04/20/17/00/00");
// 「終了時間 - 開始時間」で処理時間を算出し、変数に格納
diffDateTime = procLastEndDateTime.getTime()-procLastStrDateTime.getTime();
// 1件あたりの処理時間を計算
// ※lCnt:DBより取得した処理対象件数
// var lCnt:Number = 1;  // と仮定
// perTime = Math.round(diffDateTime/lCnt);
// 予想終了時間を算出
// var nCnt:Number = 1;  // と仮定
// forcastProcTime = perTime*nCnt;
// 「最新の処理開始日付・時間 + 予想処理時間」で予想処理終了日付・時間を算出
// procStrDateTime = nStrYear+"/"+nStrMonth+"/"+nStrDay+"/ "+nStrHour+"/ "+nStrMinute;
// procStrDateTime = makeDateTime(procStrDateTime);
// procStrDateTime = procStrDateTime.getTime();
procStrDateTime = (new Date()).getTime();
// forcastEndDateTime = procStrDateTime+forcastProcTime;
forcastEndDateTime = procStrDateTime+diffDateTime;
forcastEndDateTime = new Date(forcastEndDateTime);
function makeDateTime(procDateTime) {
	// 文字列を日付に変換
	var tmp = procDateTime.split("/");
	return new Date(tmp[0], tmp[1], tmp[2], tmp[3], tmp[4]);
}
trace(forcastEndDateTime);

あとから検索されるメンバーのためにも、スレッドに回答をお寄せください。→【フィードバックをしない
引用:
なお、「エクセルファイルのダウンロード」につきましては


----------------
 

natoshin
Åê¹ÆNo.25031
投稿日時: 2006-4-21 13:16
新米
居住地: 新宿
投稿: 20
使用環境:
windowsXP,
Flash MX 2004 pro,
ColdFusion MX,
Dreamweaber MX 2004,
Mozilla FireFox, IE
Re: 日付の加算について質問です
度々、本当にスイマセン。

具体的には
下記のようにプログラムを書いていて
ミリ秒で値を算出した時に「YYYYMMDDhhmmss」フォーマットへの
変換の仕方が分からないということです。

// 日付文字列を日付型に変換し、変数に格納
procLastStrDateTime = makeDateTime("2006/04/18/09/00/00"); // 直前処理の処理開始時間
procLastEndDateTime = makeDateTime("2006/04/18/21/00/00"); // 直前処理の処理終了時間
trace("procLastStrDateTime:" + procLastStrDateTime); // 結果値 - Thu May 18 09:00:00 GMT+0900 2006
trace("procLastEndDateTime:" + procLastEndDateTime); // 結果値 - Thu May 18 21:00:00 GMT+0900 2006

// 直前処理の「終了時間 - 開始時間」で経過した処理時間を算出し、変数に格納
diffDateTime = procLastEndDateTime.getTime() - procLastStrDateTime.getTime();
trace("diffDateTime:" + diffDateTime); // 結果値 - 43200000

// 直前処理の1件あたり処理時間を計算
lCnt = 1; // 1と仮定する
perTime = Math.round(diffDateTime / lCnt);
trace("perTime:" + perTime); // 結果値 - 1542857

// 予想処理時間を算出
// 直前処理の1件あたり処理時間 x 最新の処理対象総件数 = 予想処理時間
nCnt = 2; // 2と仮定する
forcastProcTime = perTime * nCnt;
trace("forcastProcTime:" + forcastProcTime); // 結果値 - 3085714

// 「最新の処理開始日付・時間 + 予想処理時間」で予想処理終了日付・時間を算出
procStrDateTime = makeDateTime("2006/04/19/10/00/00");
procStrDateTime = makeDateTime(procStrDateTime);
procStrDateTime = procStrDateTime.getTime();
trace("procStrDateTime:" + procStrDateTime); // 結果値 - 1145587341234

forcastEndDateTime = procStrDateTime + forcastProcTime;
trace("forcastEndDateTime:" + forcastEndDateTime); // 結果値 - 1145590426948

// ミリ秒算出値(forcastEndDateTime - 1145590426948)を「YYYYMMDDhhmmss」に
// フォーマット整形したいのですが、どうしてもやり方がわかりません。結果値としては「2006/04/20/10/00/00(又は20060420100000)」の値が取得したいです。

function makeDateTime(procDateTime) {
// 文字列を日付に変換
var tmp = procDateTime.split("/");
return new Date(tmp[0], tmp[1], tmp[2], tmp[3], tmp[4]);
}

以上、度々申し訳ございませんが、
ご返答のほど、宜しくお願い致します。
natoshin
Åê¹ÆNo.25032
投稿日時: 2006-4-21 13:18
新米
居住地: 新宿
投稿: 20
使用環境:
windowsXP,
Flash MX 2004 pro,
ColdFusion MX,
Dreamweaber MX 2004,
Mozilla FireFox, IE
Re: 日付の加算について質問です
度々、本当にスイマセン。

具体的には
下記のようにプログラムを書いていて
ミリ秒で値を算出した時に「YYYYMMDDhhmmss」フォーマットへの
変換の仕方が分からないということです。

// 日付文字列を日付型に変換し、変数に格納
procLastStrDateTime = makeDateTime("2006/04/18/09/00/00"); // 直前処理の処理開始時間
procLastEndDateTime = makeDateTime("2006/04/18/21/00/00"); // 直前処理の処理終了時間
trace("procLastStrDateTime:" + procLastStrDateTime); // 結果値 - Thu May 18 09:00:00 GMT+0900 2006
trace("procLastEndDateTime:" + procLastEndDateTime); // 結果値 - Thu May 18 21:00:00 GMT+0900 2006

// 直前処理の「終了時間 - 開始時間」で経過した処理時間を算出し、変数に格納
diffDateTime = procLastEndDateTime.getTime() - procLastStrDateTime.getTime();
trace("diffDateTime:" + diffDateTime); // 結果値 - 43200000

// 直前処理の1件あたり処理時間を計算
lCnt = 1; // 1と仮定する
perTime = Math.round(diffDateTime / lCnt);
trace("perTime:" + perTime); // 結果値 - 1542857

// 予想処理時間を算出
// 直前処理の1件あたり処理時間 x 最新の処理対象総件数 = 予想処理時間
nCnt = 2; // 2と仮定する
forcastProcTime = perTime * nCnt;
trace("forcastProcTime:" + forcastProcTime); // 結果値 - 3085714

// 「最新の処理開始日付・時間 + 予想処理時間」で予想処理終了日付・時間を算出
procStrDateTime = makeDateTime("2006/04/19/10/00/00");
procStrDateTime = makeDateTime(procStrDateTime);
procStrDateTime = procStrDateTime.getTime();
trace("procStrDateTime:" + procStrDateTime); // 結果値 - 1145587341234

forcastEndDateTime = procStrDateTime + forcastProcTime;
trace("forcastEndDateTime:" + forcastEndDateTime); // 結果値 - 1145590426948

// ミリ秒算出値(forcastEndDateTime - 1145590426948)を「YYYYMMDDhhmmss」に
// フォーマット整形したいのですが、どうしてもやり方がわかりません。結果値としては「2006/04/20/10/00/00(又は20060420100000)」の値が取得したいです。

function makeDateTime(procDateTime) {
// 文字列を日付に変換
var tmp = procDateTime.split("/");
return new Date(tmp[0], tmp[1], tmp[2], tmp[3], tmp[4]);
}

以上、度々申し訳ございませんが、
ご返答のほど、宜しくお願い致します。
野中文雄
Åê¹ÆNo.25039
投稿日時: 2006-4-21 17:57
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 日付の加算について質問です
えーと...

そうすると、以下のような数値1145590426948から、Dateインスタンスmy_dateを作成して、文字列"20060421123346"が返される関数xGetDateString()を定義できればよいということですか?

だとすると、この前段階の処理はご質問のポイントとまったく関係がなく、スレッド題名の「加算」もとくに関わってこないように思われます。問題の切分け・絞込みの努力をされないと、ご自分の力でスクリプトを書くことが難しくなりますよ。
var nTime:Number = 1145590426948;
var my_date:Date = new Date(nTime);
trace(my_date);  // 出力: Fri Apr 21 12:33:46 GMT+0900 2006
trace(xGetDateString(my_date));  // 出力: 20060421123346

引用:
natoshinさんは書きました:
// ミリ秒算出値(forcastEndDateTime - 1145590426948)を「YYYYMMDDhhmmss」に
// フォーマット整形したいのですが、どうしてもやり方がわかりません。結果値としては「2006/04/20/10/00/00(又は20060420100000)」の値が取得したいです。

function xGetDateString(_date:Date):String {
	var date_str = _date.getFullYear().toString();
	date_str += xSetDigits(_date.getMonth()+1, 2);
	date_str += xSetDigits(_date.getDate(), 2);
	date_str += xSetDigits(_date.getHours(), 2);
	date_str += xSetDigits(_date.getMinutes(), 2);
	date_str += xSetDigits(_date.getSeconds(), 2);
	return date_str;
}
function xSetDigits(n:Number, nExp:Number):String {
	if (isNaN(n) || nExp<=0) {
		return n.toString();
	}
	n = Math.floor(n);
	return (n+Math.pow(10, nExp)).toString().substr(-nExp);
}


----------------
 

natoshin
Åê¹ÆNo.25097
投稿日時: 2006-4-24 10:26
新米
居住地: 新宿
投稿: 20
使用環境:
windowsXP,
Flash MX 2004 pro,
ColdFusion MX,
Dreamweaber MX 2004,
Mozilla FireFox, IE
Re: 日付の加算について質問です
ご返答およびご指摘のほど、ありがとうございます。
ご返答下さったスクリプトで望みの結果値が
取得できました。

確かにおっしゃるとおり、「加算」は特に
問題となる部分ではないですよね。すいませんでした。
問題の切り分けおよび絞込みに関しまして鋭意、努力
致します。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops