片刻在Internet Explorer和Safari上返回无效日期

时间:2017-04-12 08:58:35

标签: javascript momentjs

我正在尝试将日历中的日期转换为特定格式。 所以我使用特定的选择器日期选择器获取日历的值:

var ChkinDate = $('#myCheckinDate').data('datepicker').getDate();
// the value I am getting is: ChkinDate=Mon Apr 24 2017 00:00:00 GMT+0300 (GTB Daylight Time);

现在我正在尝试将此日期转换为特定格式

var CheckinDate = moment(new Date(TimezoneDate(ChkinDate))).format('MM/DD/YYYY');
function TimezoneDate(objDate) {
  if (IsEmpty(objDate)) {
    return moment().format('YYYY-MM-DD 00:00:00');
  }
  else {
    return moment(objDate).format('YYYY-MM-DD 00:00:00');
  }
}

这在使用Chrome浏览器和Mozilla Firefox的Windows计算机上完美运行,但是当我使用Internet Explorer时,我得到了"无效日期"在变量CheckinDate中。这个问题也发生在Mac机器上,但现在我得到"无效的日期"在Safari上,但它在Firefox上运行良好。

1 个答案:

答案 0 :(得分:1)

由于您获得了JavaScript日期,因此可以使用以下代码:

function TimezoneDate(objDate) {
  if (IsEmpty(objDate)) {
    return moment();
  }
  else {
    return moment(objDate);
  }
}

var ChkinDate = $('#myCheckinDate').data('datepicker').getDate();
var CheckinDate = TimezoneDate(ChkinDate).format('MM/DD/YYYY');

使用moment(Date)从JavaScript日期获取片刻对象,然后您可以使用format()以您喜欢的格式获取片刻(例如format('MM/DD/YYYY')format('YYYY-MM-DD HH:mm:ss') )。

在我的示例TimezoneDate函数中返回一个时刻对象,因此您可以在其上调用format()(指定所需的格式)。

这是一个实时工作示例(模拟IsEmptyChkinDate):



// Mocking IsEmpty function
function IsEmpty(obj){
  if(obj) return false;
  return true;
}
function TimezoneDate(objDate) {
  if (IsEmpty(objDate)) {
    return moment();
  }
  else {
    return moment(objDate);
  }
}

//var ChkinDate = $('#myCheckinDate').data('datepicker').getDate();
// Mocking datepicker date
var ChkinDate = new Date(2017, 5, 10);
var CheckinDate = TimezoneDate(ChkinDate).format('MM/DD/YYYY');
console.log(CheckinDate)

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
&#13;
&#13;
&#13;