dポイントプレゼントキャンペーン実施中!

今、毎月決まった日になったら表示させるというのをやりたくて
がんばってみたのですがいまいちわかりません。

スクリプトは
onClipEvent(load){
 stop();
 function update(){
  var nowDate = new Date();
  var Day = nowDate.getDate();
  if (Day == 1){
   this.gotoAndStop("today");
  }else if(Day == 16){
   this.gotoAndStop("today");
  }else
   this.gotoAndStop("a");
  }
}
onClipEvent(enterFrame){
update();
}

こんな感じです。(まったく自身がありません。)
いまいち変数のところがわかりません。オブジェクトの生成とか・・・
PCの日付の方は変えてありますが、表示がされません。

今後は「次回の何回目は後何日」って感じに出来たらと思っています。
これについてもよかったら何かアドバイスお願いします。

A 回答 (4件)

ちょっと暇なので確認してみました。


FLASH5で動作したスクリプト

onClipEvent (load) {

 setTodayMov();
 stop();

  function setTodayMov(){
   var nowDate = new Date();
   var vDate = nowDate.getDate();
//vDate = 1;
//vDate = 16;
   if( vDate == 1 or vDate == 16 ){
    this.gotoAndStop("today");
   }else{
    this.gotoAndStop("a");
   }
  }
}

でした。
しつこかったですか?(笑)

この回答への補足

先ほどの「後何日です」ってやつなんですけど

今日が13日なので、16日まで「3月16日まで後3日です」
たとえば今月からスタートしたとなると、次回の16日は2回目になります。
これをくっつけて「次回の第2回(3月16日)まで後3日です」と表示させたいのです。
当日は「当日です」のような表示をさせて
すぎれば、「次回の第3回(4月1日)まであと15日です。第2回もよろしく」
というふうに、これを毎月表示させたいと思っています。

これの作成は技術的に楽な方でしょうか?個人的に結構日付を扱うのは
結構難しいきがします。

補足日時:2003/03/13 11:17
    • good
    • 0
この回答へのお礼

ありがとうございます。

ばっちりうまくいきました。orもちゃんと使えるんですね。
わざわざ変な呼び出しをさせなくていいというのが思いつきませんでした。

もうひとつの質問の補足させていただきます。よければアドバイスお願いします。今回のを改良していけば出来るかな?って思っているのですがどうでしょう?
いくつもすいません。よろしくお願いします

お礼日時:2003/03/13 11:33

がいーーーんっ!!!


コンプリートしたつもりだったのに・・・>涙
またまた登場です。

予想以上にややこしかったです。<日付がらみ
DateDiffみたいに、日にちの差をとる標準関数があれば、
もう少しマシだったのかも!?


気づいてませんでした。<月2回開催
3月16日と4月1日って書いてありましたね・・・。
(16・16って思い込んでた・・・<月1)
開催日、月2日あったんですね。
開催日、月1日と思い込んで書いていました。
ご察しの通り、今カキコしたのは開催日が月1回だけの場合です。

ということで、
ただの迷惑なカキコになってしまいました>スクリプトのカキコ

カキコしたプログラムは使えないと思うので
ちょっとした参考程度に使っていただけると
ありがたいです。

書き換えるというより、
自分で最初から書いた方が速いと思います。
<そのままでないので

という感じでした・・・。

でわでわ
    • good
    • 0
この回答へのお礼

ありがとうございます。
いやいや、非常に勉強になりましたよ。
参考にして、ひらめきと発想でやってみます。
ところで、そんなにスクリプト自体変わってしまうのだろうか・・・
うーむ

お礼日時:2003/03/14 18:34

補足についてです。


簡単と思っていたら、じっさい泥沼でした。。。
ちょっと泥くさいスクリプトですが書いてみました。
16日の「16」って数字と、開始日の日付が、プログラム内に固定ですが、
ながーーーーい説明してみると


まず、1個ムービークリップを作って

1.フレームラベル名: A のフレームに
 ・「第1回[空白1]まであと[空白2]日です。」
 ([空白1]とかは何も書いてないスペースです。)
 と書いたものを置く。
 ・空白1の位置に、テキストの[テキストオプション]-[ダイナミックテキスト]で
 [変数]の個所に、指定の変数名を書く。たとえば、_root.gstrDate
 ・空白2の位置に、同じくダイナミックテキストで変数に、たとえば、_root.gintDay
 を配置する。
 (開催1回目の表示)

2.作成したムービークリップの、フレームラベル名: B のフレームで
 「次回の第[空白1]回([空白2])まであと[空白3]日です。第[空白4]回もよろしく」
 と書いたものを置く。
 ・空白1に上記と同様、ダイナミックテキストを配置して、変数に、 _root.gintNum
 ・空白2に、ダイナミックテキストを配置して変数に、_root.gstrDate
 ・空白3に、ダイナミックテキストを配置して変数に、 _root.gintDay
 ・空白4に、ダイナミックテキストを配置して変数に、 _root.gintNowNum
 (開催2回目以降の表示)

3.作成したムービークリップのフレームラベル名: TODAY のフレームで
 「当日です」と書いたものを設置する
  (当日の表示)

4.ルートムービーの最初のフレームに以下のコードを書く
 ■前提
 A.起点日が、現在の日付より、前の日付にならない
 B.開催日が、29日~31日など、月によって、ない日にちを指定していない。

var gintNum = 1;
var gstrDate;
var gintDay;
var gintExecDay = 16; // 毎月16日に開催
var gintNowNum; // 現在の開催回数
//コンテンツを表示を開始する起点日;
//1月= 0 ・ 12月=11 なので 2003/03/13で 2003,2,13をセット
var gdtStartDate = new Date(2003,2,13) ;


5.上記で作ったムービークリップにスクリプトを記述

onClipEvent(load){

// 次回(何月何日)表示用の月
var lintDispMonth;

// 今日の日付の積算(ミリ秒単位)を算出する
var lTotalMilliSec;

// 前回の開催日の日付の積算(ミリ秒単位)を算出
var lNextTotalMilliSec;

//現在の日付(年・月・日)
var ldtToday = new Date();

//デバッグ用
//_root.gdtStartDate = new Date(2003,1,2)
//var ldtToday = new Date( 2003,2,10);

var lintNowYear = ldtToday.getFullYear();
var lintNowMonth = ldtToday.getMonth();
var lintNowDay = ldtToday.getDate();
//次回の日付(年・月)
var lNextYear;
var lNextMonth;

//現在が開催日
if( lintNowDay == _root.gintExecDay ){
this.gotoAndStop("TODAY");
stop();
return;
}

//-------------------------------------------------------
//簡単に、日にちの差をとる関数がないため、時間の積算で算出
//あと何日を算出する処理
//-------------------------------------------------------

// 現在の日付の積算(ミリ秒単位)を算出する
lTotalMilliSec = Date.UTC(lintNowYear,lintNowMonth,lintNowDay);


// 次回の開催日の日付の積算(ミリ秒単位)を算出
lNextYear = lintNowYear;
// 1月 = 0 / 12月=11 なので getMonthの値に1加算すると、当月の数字になる
if( lintNowDay < _root.gintExecDay ){
//次回は当月
lNextMonth = lintNowMonth;
lintDispMonth = lNextMonth+1;

}else{
//次回は翌月
lNextMonth = lintNowMonth+1;
if( lintNowMonth == 11 ){
//来年
lNextYear = lintNowYear +1;
//1月
lNextMonth = 0;
}
lintDispMonth = lNextMonth + 1;
if( lintDispMonth == 13 ){
lintDispMonth = 1;
}

}
lNextTotalMilliSec = Date.UTC(lNextYear,lNextMonth,_root.gintExecDay);

//積算ミリ秒を日にちに換算
_root.gintDay = Math.floor((lNextTotalMilliSec-lTotalMilliSec)/(1000*60*60*24));

//------------------------------------------------------
// 次回の開催回数・次回の予定日・現在の開催回数を表示する処理
//------------------------------------------------------

//起点日の日付(年・月・日)
var lintStYear = _root.gdtStartDate.getFullYear();
var lintStMonth = _root.gdtStartDate.getMonth();
var lintStDay = _root.gdtStartDate.getDate();

//起点日からの年数・月
var lintYear = lintNowYear - lintStYear;
var lintMonth = lintNowMonth - lintStMonth;
if( lintNowDay > _root.gintExecDay ){
//当月は開催終了
lintMonth = int(lintMonth) + 1;
}
if(lintStDay < _root.gintExecDay ){
//起点日の月は開催されている
lintMonth = int(lintMonth) + 1;
}
_root.gintNum = (lintYear*12) + lintMonth;
_root.gstrDate = lintDispMonth + "月" + _root.gintExecDay + "日";
_root.gintNowNum = _root.gintNum -1;

//1回目の開催日
var ldtFirstDate;

if( lintStDay <_root.gintExecDay ){
//当月が1回目の開催日
ldtFirstDate = new Date( lintStYear,lintStMonth,_root.gintExecDay);
}
if( lintStDay >_root.gintExecDay){
//翌月が1回目の開催日
lintStMonth = int(lintStMonth) + 1;
if( lintStMonth == 12){
lintStYear = int(lintStYear) + 1;
lintStMonth = 0;
}
ldtFirstDate = new Date( lintStYear,lintStMonth,_root.gintExecDay);
}

if( ldtFirstDate > ldtToday ){
//第1回目
this.gotoAndStop("A");
stop();
return;
}

//第2回目以降
this.gotoAndStop("B");
stop();
return;


}

という感じでしたのでした。
私が書いたらダラダラのスクリプトになっちゃいました。
さらに、インデントを書き込めないのでとっても見難いです。
こんなにカキコしたらヒンシュクかもと思いつつも、
ご参考までに。
    • good
    • 0
この回答へのお礼

ありがとうございます。

コメントまで入れていただいて助かります。
で、今解析中!!かなりややこしいですね~。(勉強不足)
1日も開催されるので、そのスクリプトははいってないですよね?
入ってたらどうしよ・・・どこにどう足せばいいのか、書き換えすればいいのか必死こいて考えてます。出来るだろうか・・・

やっぱり日付関係はややこしいです。

お礼日時:2003/03/14 14:31

ClipEventのloadのスクリプトは特に間違えがないように思えます。



で、enterFrameで update()関数をコールしてるのですが
ここで、スクリプトエラーになると思います。

FLASHのバージョンは知りませんが、
シンタックスチェックをかけるか、
ムービープレビューで動作確認してみる必要があると思います。

たぶん、update()関数は1度呼び出せば十分だと思うので
onClipEvent(load)で update()関数を呼び出せばよいと思います。
あと、update()って関数の名前は控えた方が良いかも!?
というのは、予約語の関数名と一緒だったらまずいので・・・。

やるとしたら

onClipEvent(load){
 setDay(); 
 stop();

 function setDay(){
  var nowDate = new Date();
  var Day = nowDate.getDate();
  if (Day == 1){
   this.gotoAndStop("today");
  }else if(Day == 16){
   this.gotoAndStop("today");
  }else
   this.gotoAndStop("a");
  }

}

あとは、この記述をしているムービークリップに
todayというフレームラベル名と
aというフレームラベル名があれば動作すると思います。

確認して言っているわけではないので
動かなかったらごめんなさい。

あと、「次回の何回目は後何日」というのは
僕的に、すこし、意味がわからなかったので
答えれないです。

結構、スクリプトをよく書けていると思うので
がんばってください。
(えらそうですいませんm(_ _)m)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!