【问题标题】:javascript: changing date format but not to stringjavascript:更改日期格式但不更改为字符串
【发布时间】:2019-02-15 18:20:58
【问题描述】:

有没有办法更改日期对象的格式,但将其保留为日期而不是字符串?我有一个函数可以将新的 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;
}

但是,这会将日期转换为字符串。我想更改格式,以便我的日期显示为 2019 年 2 月 15 日,但希望将其保留为日期对象,以便按时间顺序而不是字母顺序排序。这可能吗?

编辑:

在我们的表格中,我们能够按时间顺序对表格的内容进行排序,在我们的对象数组中为 start_date 创建一个日期对象:

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

然后使用 HTML 中的管道过滤器将日期对象格式化为 MMM d, YYYY:

<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();
        }
    }

这将按时间顺序返回过滤器,但格式如下所示:

我们希望日期格式为“2019 年 2 月 18 日”,但按时间顺序显示在过滤器中。谢谢!

【问题讨论】:

  • 列过滤器组件的 HTML 是否可供您编辑?意思是,您可以编辑该组件中的 HTML 吗?

标签: angularjs sorting date date-formatting


【解决方案1】:

使用 $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 示例。

【讨论】:

  • 谢谢!这确实很有帮助,但 Javascript 方式似乎仍然生成字符串而不是日期对象。我能够通过 JS 方式转换为 mediumDate 格式,但是当我应用排序时,它仍然按字母顺序而不是按时间顺序排序
  • 正确。 Javascript 方法返回一个字符串对象。但这应该仅用于显示而不是更改值。请在此处发布您的代码或创建一个 plnkr,以便我们对其进行编辑和修复。
  • 谢谢@rangamannar。我添加了更多细节,如果有帮助请告诉我。
猜你喜欢
  • 2016-06-25
  • 1970-01-01
  • 2021-05-07
  • 2022-07-04
  • 2011-05-04
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多