![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
Flash lite1.1で、あるイベント日(3月3日12時00分)までの日数を「あと○○日」という形でカウントダウン表示させたいと思っています。
2月25日には「あと6日」
2月26日には「あと5日」
・
・
というように。
またカウントの切り替わる時間は12時00分に統一したいです。
http://oshiete1.goo.ne.jp/qa863385.html
↑ここの回答を見ながら作ってみたのですが、Flash lite1.1ではエラーが出てしまい上手くいきませんでした。
Flash lite1.1で動作させる為にはどうすればよいのでしょうか?
いろいろ試してみたのですがどうしても分かりません。
どなたか教えていただけないでしょうか?
No.1ベストアンサー
- 回答日時:
日数の計算は年・月ごとに日数が異なるため、数値の演算のように単純に計算することができません。
しかし、基準を決めて、そこからイベントの日までの日数と現在までの日数を算出すると、両者は同じ基準から見た日数になり、容易に差分を求めることができます。
No.863385 の#2の作例では、1970 年1月1日0時0秒を基準としてイベントの日までの時間と現在までの時間を求め、この差分を日数に直しています。
1970 年1月1日を基準にする理由は、Date クラス(古い Flash ではオブジェクト)という日付や時刻を扱うクラスが持っている機能で 1970 年1月1日から指定の日時までの経過時間を取得できるからです。
しかし、Flash Lite 1.1 には Date クラスやこれと同等の機能の関数がありません。
同じ発想で考えるならば、別の基準が必要になります。
日数単位の計算でしたら、グレゴリオ暦の特徴を活かした様々なアルゴリズムが考案されています。
他にも、ユリウス暦を使って求める方法などもあるそうです。
ActionScript の作例ではないのですが、現在の年月日とイベントの年月日だけで計算できる(配列変数も不使用)アルゴリズムがありました。
年に満たない分の日数を配列変数を使わずに求める部分が理屈っぽい話になっていますけれど、よろしければご参照ください。
・ ++C++; // 未確認飛行 C:
経過日数の計算(アルゴリズムとデータ構造)
http://ufcpp.net/study/algorithm/o_days.html
紹介されているプログラムはC#のものなので、Flash Lite では使えません。
Flash Lite 1.1 用に書き直すと、大体、次のようになりますでしょうか。
このスクリプトは、タイムラインのフレームに記述してください。
(↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)
/*****************************************************/
/////////////////////////////////////////////////////////////////////
//初期設定
/////////////////////////////////////////////////////////////////////
//イベントの年月日
event_y = 2009;
event_m = 3;
event_d = 3;
//現在の年月日を取得
today_y = fscommand2( "GetDateYear" );
today_m = fscommand2( "GetDateMonth" );
today_d = fscommand2( "GetDateDay" );
/////////////////////////////////////////////////////////////////////
//グレゴリオ暦1年1月1日からイベント日までの経過日数を求める
/////////////////////////////////////////////////////////////////////
//イベントの月が1月または2月の場合、前年の13月・14月として扱う
if( event_m <= 2 )
{
temp_y = event_y - 1;
temp_m = event_m + 12;
}
else
{
temp_y = event_y;
temp_m = event_m;
}
//経過年を日に換算:とりあえず全て平年と見なして計算
year_d = 365 * ( temp_y - 1 );
//閏年の回数を算出
leap_y = int( temp_y / 4 ) - int( temp_y / 100 ) + int( temp_y / 400 );
//1月1日からイベントの月の1日までの日数
adjust_d = int( ( temp_m * 979 - 1033 ) / 32 );
//1年1月1日からイベントの年月日までの日数
event_days = year_d + leap_y + adjust_d + event_d - 1;
//////////////////////////////////////////////////////////////////
//グレゴリオ暦1年1月1日から現在までの経過日数を求める
//////////////////////////////////////////////////////////////////
//現在の月が1月または2月の場合、前年の13月・14月として扱う
if( today_m <= 2 )
{
temp_y = today_y - 1;
temp_m = today_m + 12;
}
else
{
temp_y = today_y;
temp_m = today_m;
}
//経過年を日に換算:とりあえず全て平年と見なして計算
year_d = 365 * ( temp_y - 1 );
//閏年の回数を算出
leap_y = int( temp_y / 4 ) - int( temp_y / 100 ) + int( temp_y / 400 );
//1月1日から現在の月の1日までの日数
adjust_d = int( ( temp_m * 979 - 1033 ) / 32 );
//1年1月1日から現在までの経過日数
today_days = year_d + leap_y + adjust_d + today_d - 1;
//////////////////////////////////////////////////////////////////
//イベントまでの日数を求める
//////////////////////////////////////////////////////////////////
day_cnt = event_days - today_days;
/*****************************************************/
イベントの年月日を、変数 event_y ・ event_m ・ event_d に指定してください。上記の作例では 2009 年3月3日をイベントの日とし、現在からこの日までの日数を算出します。
最終的に、変数 day_cnt にイベント日までの日数が入ります。ダイナミックテキストなどに出力して、動作を確認してみてください。
シフト演算( >> 2 と >> 5 の部分)は Flash Lite 1.1 では使えないため、シフト演算の部分を除算に置き換えています。
スクリプトを書いたフレームと次のフレームをループするなどしてスクリプトが連続的に実行される構成にすると、閲覧中に日付が変わった時にも日数が減るようになります。
当方は Flash Lite 1.1 や Flash Player 4 の文法に詳しくないので、なんか鈍くさいことをやっているかもしれません ^^;
プレビューでの動作確認のみで実機では検証しておりませんが、ご参考までに。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) WORKDAY関数 4 2023/06/08 13:23
- 工学 ちなみになぜv=(v・e1)e1+(v・e2)e2はe1やe2が、正規直交基底でないと成り立たないと 2 2022/12/22 17:22
- マルウェア・コンピュータウイルス FlashPlayerの削除とマルウェア感染について 5 2023/02/23 20:52
- Excel(エクセル) エクセルで、特定のセルの内容を更新すると、別の特定セルに 更新日付が自動的に表示させる方法はあります 1 2022/11/14 21:03
- Excel(エクセル) エクセルで、 A1セルに「A」という値、 B1セルに「B」という値が入っています。 どちらも表示形式 5 2023/02/22 23:05
- PHP PHPで今日の日付から3日後を表示させ、3日後にその日から3日後を表示させたい 2 2022/11/30 17:38
- Excel(エクセル) countif関数について質問 4 2022/06/14 12:11
- 工学 以前、線形代数からフーリエ級数展開を導く上で 式v=(v, e1)e1+(v, e2)e2+…+(v 6 2022/06/29 17:24
- デスクトップパソコン デバイスからのHDMI信号がありません 5 2022/05/07 18:08
- Excel(エクセル) EXCEL関数(数式)を教えてください 2 2022/06/08 18:32
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
調和関数について
-
c++ cmathとmath.h
-
カウントダウン(のみ)がうま...
-
VB6でユーザー定義型がNothing...
-
エラー(型が一致しません。)...
-
変な質問ですみません、n番目の...
-
時間差を取得結果を求めるには
-
このソースで、仕組みについて...
-
String.prototype.split2d 理...
-
flashliteでランダム(シャッフ...
-
一定時間ごとにカウント
-
空の配列を示す方法
-
ユーザー定義関数が呼び出せない
-
ダイナミックテキストに配列の...
-
重複しない乱数の生成
-
FlashLite4.0について
-
ActionScript3.0のfor文の処理...
-
Flash初心者です。
-
TextChangeイベントが発生しない
-
VBのツリービューについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c++ cmathとmath.h
-
python: 直角三角形の種類を求...
-
三辺の長さから角度を求めたい...
-
プログラム開始から 2秒毎に ...
-
調和関数について
-
random()関数について
-
エクセル マクロ(A1:A10)までの...
-
【ランダム関数】0と1を返すだ...
-
ミリ秒までカウントできるタイマー
-
エラー(型が一致しません。)...
-
VB6でユーザー定義型がNothing...
-
TextChangeイベントが発生しない
-
VB.NET の配列の要素数
-
変な質問ですみません、n番目の...
-
配列の要素番号を取得するには?
-
#define 文
-
重複しない乱数の生成
-
VBでボタンを押すと画像をラン...
-
LRESULTとHRESULT
-
エラー438でオブジェクトの...
おすすめ情報