
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
potplayerについて質問です
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
-
ad or script について
-
Flashplayerの運用について
-
VBAのコンボボックスの年月表示...
-
Adobe Flash Player
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c++ cmathとmath.h
-
プログラム開始から 2秒毎に ...
-
python: 直角三角形の種類を求...
-
=FREQUENCY(範囲,{59,69,74}) ...
-
【ランダム関数】0と1を返すだ...
-
エラー(型が一致しません。)...
-
VB6でユーザー定義型がNothing...
-
LRESULTとHRESULT
-
ifdefとenum
-
変な質問ですみません、n番目の...
-
VB.NET の配列の要素数
-
【javaScript】KeyboardEventで...
-
#define 文
-
VBS 名前定義の確認→ありかなし...
-
fetchでreturnで戻り値
-
PHP + MySQL で登録時に重複チ...
-
VBA 配列で重複した単語が格納...
-
配列の要素番号を取得するには?
-
重複しない乱数整数を発生させる。
-
Vba 配列の中の特定文字列の位...
おすすめ情報