JavaScript: изменение формата даты, но не в строку - PullRequest
0 голосов
/ 15 февраля 2019

Есть ли способ изменить формат объекта даты, но сохранить его как дату, а не строку?У меня есть функция, которая преобразует новый объект Date () в следующий формат:

function formatDate(date) {

    var monthNames = [
        "January", "February", "March",
        "April", "May", "June", "July",
        "August", "September", "October",
        "November", "December"
    ];

    var day = date.getDate(), 
            monthIndex = date.getMonth(),
            year = date.getFullYear();


    return monthNames[monthIndex].substr(0,3) + ' ' + day + ', ' + year;
}

Однако, это преобразует дату в строку.Я хочу изменить форматирование так, чтобы моя дата отображалась как 15 февраля 2019 года, но я хочу сохранить ее как объект даты, чтобы она сортировалась в хронологическом порядке, а не по алфавиту.Возможно ли это?

EDIT:

В нашей таблице мы можем отсортировать содержимое таблицы в хронологическом порядке, создав объект даты для start_date в нашем массиве объектов:

start_date: new Date(onbCase.getDisplayValue('hr_profile.employment_start_date'))

, затем форматирование объекта даты в MMM d, YYYY с использованием фильтра канала в HTML:

<td ng-show="c.options.start_date" title="{{item.start_date}}">{{item.start_date | date:'mediumDate':'Z'}}</td>

Наша проблема возникает, когда мы пытаемся заставить наши фильтры столбцов также отображаться в хронологическом порядке.с тем же форматом.Вот как мы создаем наши фильтры столбцов в контроллере:

c.filter = function() {
        for (var i=0; i<c.onbCase.length; i++) {
            c.onbCase[i].case_visible = true;
            for (var z=0; z<c.filters.length; z++) {
                if(c[c.filters[z].model] && c[c.filters[z].model].length > 0) {
                    var model = c[c.filters[z].model];  
                    if (model.indexOf(c.onbCase[i][c.filters[z].attribute]) == -1) {
                        c.onbCase[i].case_visible = false;
                    }
                }
            }
        }
        //Store unique values for filters
        generateFilterOptions();
        return; 
    }

    $scope.searchTable   = '';     // set the default 

    /*/////////////////////////////////////////////////////////////////////////////
    // Support Function: Define filters                                          //
    *//////////////////////////////////////////////////////////////////////////////

    function defineFilters() {
        //Declare filter variables
        c.filters = []

        c.start_date_list = [];
        if(c.options.start_date){
            c.filters.push({
                id: 'start_date',
                label: 'Start Date',
                model: 'start_date_select',
                unique_list: 'start_date_list',
                attribute: 'start_date'
            });
        }           
    }

    /*/////////////////////////////////////////////////////////////////////////////
    // Support Function: Generate filter options                                 //
    *//////////////////////////////////////////////////////////////////////////////
    function generateFilterOptions() {
        c.numResults = 0;
        //Initialize filter options
        for (var z=0; z<c.filters.length; z++) {
            c[c.filters[z].unique_list] = [];
        }
        //Store unique values for filters
        for (var i=0; i<c.onbCase.length; i++) {
        if (c.onbCase[i].case_visible) {
                c.numResults++;
                for (var x=0; x<c.filters.length; x++) {
                    if (c[c.filters[x].unique_list].indexOf(c.onbCase[i][c.filters[x].attribute])===-1) {
                        c[c.filters[x].unique_list].push(c.onbCase[i][c.filters[x].attribute]);     
                    }
                }   
            }
        }
        //Sort unique values for filters            
        for (var y=0; y<c.filters.length; y++) {
            c[c.filters[y].unique_list].sort();
        }
    }

Это вернет фильтр в хронологическом порядке, но формат выглядит следующим образом: enter image description here

Мы бы хотели, чтобы формат даты был «18 февраля 2019 года», но отображался в фильтре в хронологическом порядке.Спасибо!

1 Ответ

0 голосов
/ 16 февраля 2019

Визуализация даты в требуемом формате и сортировка на основе объекта даты вполне возможна с помощью $ filter.

Более подробная информация доступна здесь: https://docs.angularjs.org/api/ng/filter/date

Если вы хотитеполучить отформатированную дату в Javascript,

function getFormattedDate(dateObj) {
    return $filter('date')(dateObj, 'mediumDate');
}

В другом случае, если мы хотим использовать это в HTML напрямую:

<span>{{ dateObj | date:'mediumDate'}}</span>

Вот пример Plnkr .

...