發問時間: 電腦與網際網路程式設計 · 1 0 年前

如何做FLASH倒數計時器

我想做一個用在倒數計時器

我有看過一個語法是這樣

var myDate:Date = new Date(2010,7,7);

var today:Date;

var timeDiff:Number;

function onEnterFrame(){

today = new Date();

timeDiff = Math.floor((myDate.getTime() - today.getTime())/1000);

days = Math.floor(timeDiff / 86400);

seconds = (timeDiff % 86400);

lhours = int(seconds / 3600);

lminutes = int((seconds / 60) - (lhours * 60));

lseconds = int((seconds % 60));

day_txt.text = days;

sec_txt.text = lseconds;

min_txt.text = lminutes;

hour_txt.text = lhours;

}

但是我套用的時候日期都怪怪的!!

都會多一個3!!

不知是怎麼一回事,麻煩大大幫忙!!

已更新項目:

不好意思!!

我在加問一個問題

這是怎麼做的呢?!麻煩了!!謝謝

2 個已更新項目:

這一種的倒數計時器是怎麼做的?!

他是可以改時間的!!

麻煩了!!謝謝!!

3 個已更新項目:

//將輸入的文字欄位放到myDate中

today = new Date();

這段不太懂!!

2 個解答

評分
  • Lv 5
    1 0 年前
    最佳解答

    因為 Date格式化之後,月份是從0開始的,所以月份需要-1才行

    var tar_year=2010;

    var tar_month=7;

    var tar_day=7;

    var myDate:Date = new Date(tar_year,tar_month-1,tar_day);//有宣告格式,所以月份需要-1

    ...

    ......

    .....

    或許您會覺得奇怪

    為什麼myday不也是Date,但怎麼不需要扣月份

    因為Data一開始沒格式化的話,計錄的就是只是毫秒數

    2010-07-06 18:41:28 補充:

    抱歡上面的說明有點奇怪

    補充說明一下:

    var myDate:Date = new Date(2010,7,7);

    因為月份是從0開始計算的

    0=一月,1=二月,2=3月..........................

    所以您的第一句宣告

    其實指的是myDate=日期2010年8月7日

    這樣子您應該就比較清楚了

    2010-07-07 14:43:55 補充:

    這是怎麼做??,不懂您的意思

    2010-07-07 23:14:03 補充:

    加3個動態文字欄位就好了

    假設3個動態文字欄位的實體名稱為yy,mm,dd

    var myDate;

    var today:Date;

    var timeDiff:Number;

    function onEnterFrame(){

    var myDate = new Date(yy.text,mm.text-1,dd.text);//將輸入的文字欄位放到myDate中

    today = new Date();

    timeDiff = Math.floor((myDate.getTime() - today.getTime())/1000);

    2010-07-07 23:14:09 補充:

    days = Math.floor(timeDiff / 86400);

    seconds = (timeDiff % 86400);

    lhours = int(seconds / 3600);

    lminutes = int((seconds / 60) - (lhours * 60));

    lseconds = int((seconds % 60));

    day_txt.text = days;

    sec_txt.text = lseconds;

    min_txt.text = lminutes;

    hour_txt.text = lhours;

    }

    沒實測過,您可以試試看

    2010-07-08 14:38:23 補充:

    抱歉,是要建3個「輸入文字欄位」yy,mm,dd

    var myDate = new Date(yy.text,mm.text-1,dd.text);//將輸入的文字欄位放到myDate中

    就是會把yy.text(使用者在yy欄位中所填的年份)傳送到myDate中

    月份和日期也是一樣的意思

    而mm.text-1就是為了讓使用者填的月份轉成myDate的格式(月份從0開始算)

    其實就和您原本的程式宣告

    var myDate:Date = new Date(2010,7,7);

    是一樣的意思,只是把裡面的數字改成由欄位輸入而已

    2010-07-08 14:46:54 補充:

    關於「輸入文字欄位」的簡單範例:

    http://nv.com.tw/game-test/knowledge/2010.07.08ins...

    解壓縮後看看

    已經轉成cs3版本,只要是cs3以上的flash都可以開啟

    參考資料: 自己亂掰的, 自己亂掰的, 自己迷糊中, 自己亂掰的, 自己亂掰的, 自己亂掰的, 自己亂掰的
  • 1 0 年前

    myDate.getTime() 是從格林威治時間 1970到目前的毫秒數

    基本上邏輯都沒有問題

    問題出在你Data 宣告時 它的月份參數是 0 -11 (1-12月)

    所以自然多了一個月的天數

還有問題?馬上發問,尋求解答。