2

我正在开发一个 Backbone 应用程序,并且从 REST API 数据中,我得到了 Mongo 以 ISO 格式YYYY-MM-DDT12:00:00.000Z生成的日期。为了在前端视图(jqgrid colmodel)表格网格视图中以人类可读的方式显示,我需要向用户展示一个简单的格式DD.MM.YYYY。条件是,我需要通过仅将后端日期的视图转换为这种新格式来转换日期。

有任何想法吗?

4

4 回答 4

0

您可以使用moment.js解析字符串并以人类可读的格式输出。

于 2013-04-09T12:32:08.980 回答
0

你可以使用这样的函数:

var convertDate = function(date){
    var date = date.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})/);
    if(date == null){
        return false;   
    }else{
        var dateObj = {
            dateFormat1 : date[3] + '.' + date[2] + '.' + date[1],
            dateFormat2 : date[1] + '-' + date[2] + '-' + date[3],
            dateFormat3 : date[2] + '/' + date[3] + '/' + date[1],
            time : date[4] + ':' + date[5] + ':' + date[6],
        };
        return dateObj;
    }
};

var obj = console.log(convertDate('2013-04-09T12:00:00.000Z').dateFormat2);
于 2013-04-09T12:41:32.650 回答
0

我以某种方式通过编写自己的库使其工作。这只是您需要包含的代码实例,用于更改或转换来自服务器端 JSON 模式的日期。

代码:

cacheElements: function() {
  this.$datePickers = this.$el.find('.datepicker');
  this.$datePickerStart = this.$datePickers.filter('.start');
  this.$datePickerEnd = this.$datePickers.filter('.end');
  this.$loader = this.$el.find('.timeframe-loader');
},

render: function() {
  this.$el.html(this.template(this.model));

  this.cacheElements();

  this.$datePickers.datepicker({ dateFormat: 'dd.mm.yy' });

  this.delegateEvents();

  return this;
},

_onError: function(model, error) {
  this._hideLoader();
  var $where;
  if (error.where == 'startDate') {
    $where = this.$datePickerStart.closest('div');
  } else if (error.where == 'endDate') {
    $where = this.$datePickerEnd.closest('div');
  }
  new Tooltip.View({
    srcElement: $where,
    content: error.message,
    position: 'bottom'
  });
},

_onClickSendData: function() {
  var start = this.$datePickerStart.val();
  var end = this.$datePickerEnd.val();

  var startDate = humanDateStringToJSDateString(start);
  var endDate = humanDateStringToJSDateString(end);

  // If didn't actually change, do nothing:
  var modelStartDate = this.model.get('startDate');
  var modelEndDate = this.model.get('endDate');
  if (this._compareYYYMMDD(new Date(startDate), modelStartDate) !== 0 || this._compareYYYMMDD(new Date(endDate), modelEndDate) !== 0) {
    this._showLoader();

    this.model.set({
      startDate: new Date(startDate),
      endDate: new Date(endDate)
    });
  }
},

_compareYYYMMDD: function(date1, date2) {
  var num1 = dateToString(date1).replace('-','');
  var num2 = dateToString(date2).replace('-','');
  return date1 - date2;
},

_showLoader: function() {
  this.$loader.show();
},

_hideLoader: function() {
  this.$loader.hide();
},

setEndDate: function() {
  this.$datePickerStart.val(dateToDottedString(addDays(new Date(), - App.state.get('timeframe'))));
  this.$datePickerEnd.val(dateToDottedString(new Date()));
}

});

如果您在理解逻辑上有困难,请告诉我!

于 2013-04-15T15:35:48.140 回答
-2

我怀疑 jQuery 有任何日期解析/格式化功能。

您需要自己解析它并转换为所需的格式。

于 2013-04-09T12:31:11.330 回答