我正在尝试将从日历中获取的日期转换为特定格式。 因此,我使用特定选择器日期选择器获取日历的值:
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 上运行良好。
最佳答案
由于您正在获取 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 日期获取 moment 对象,然后您可以使用 format()
以您喜欢的格式获取时刻(例如 format('MM/DD/YYYY')
或 format('YYYY-MM-DD HH:mm:ss')
).
在我的示例中,TimezoneDate
函数返回一个 moment 对象,因此您可以调用 format()
(指定您需要的格式)就可以了。
这是一个实时工作示例(模拟 IsEmpty
和 ChkinDate
):
// 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>
关于javascript - moment 在 Internet Explorer 和 Safari 上返回无效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43364893/