[Ext.NET] 如何使 DateField 顯示改為台灣日期

[Ext.NET] 如何使 DateField 顯示改為台灣日期

在某些單位裡面日期要顯示成台灣格式是非常重要的,偏偏我們常用的套件都是外國人寫的,

所以往往都是西元年,但… 良好的framework應該要留洞給我們改 !!

 

首先你可以參考文件 Date.formatFunctions  就知道你可以定義自己的format,於是我們可以寫一個如下的;



        if (Ext.isEmpty(this) == false) {
            var year = this.getFullYear() - 1911;
            var month = this.getMonth() + 1;
            var day = this.getDate();

            return year + "/" + month + "/" + day;
        }
        else {
            return false;
        }
    };

當然客製化 format 之後,當然也要客製化 parse ,一定要有來有往才行的阿 (Date.parseFunctions)


        var datePart = date.split("/");
        var dayPart = datePart[2].split(" ");
        var _dateYear = parseInt(datePart[0]) + 1911;
        var _dateMonth = parseInt(datePart[1]);
        var _dateDay = parseInt(dayPart[0]);

        if (Date.isValid(_dateYear, _dateMonth, _dateDay) == false) {
            if (strict == true) {
                return null;
            }
        }
        else {
            return new Date(_dateYear, _dateMonth - 1, _dateDay);
        }
    };

這樣看似應該就沒問題了,不過真的放上去之後,你會發現不管怎樣它都不會呼叫你定義的format !!!

原因其實是從 DataPicker 選完帶回來的是 Date 物件,DateField 在 format之前會先看你格式有沒有包含時間,

而它判斷的方式是看你format有沒有那些含時間的,可以參考下面那張圖或Date

DateField.safeParse

formatContainsHourInfo

 

taiwan 當作 format 檢查完之後會被判斷成沒有含時間的格式,所以江湖一點訣就是寫成下面這樣


        var datePart = date.split("/");
        var dayPart = datePart[2].split(" ");
        var _dateYear = parseInt(datePart[0]) + 1911;
        var _dateMonth = parseInt(datePart[1]);
        var _dateDay = parseInt(dayPart[0]);

        if (Date.isValid(_dateYear, _dateMonth, _dateDay) == false) {
            if (strict == true) {
                return null;
            }
        }
        else {
            return new Date(_dateYear, _dateMonth - 1, _dateDay);
        }
    };

從此之後,你的 DateField 就可以正常顯示台灣格式日期了 ~~