formatDate JavaScript 函数仅适用于 Chrome

Posted

技术标签:

【中文标题】formatDate JavaScript 函数仅适用于 Chrome【英文标题】:formatDate JavaScript function only works in Chrome 【发布时间】:2013-11-29 01:41:05 【问题描述】:

我有一个 javascript 函数可以在 Chrome 中正常运行,但在 Firefox 或 Safari 等其他浏览器中却没有:

function formatDate(date)
    var result =  date.getFullYear() + "-" + 
    (((date.getMonth()+1)<10?'0':'') + (date.getMonth()+1)) + "-" + 
    date.getDate() + " " + date.getHours() + ":" + 
    (date.getMinutes()<10?'0':'') + date.getMinutes() + ":00";

    console.log("formatDate(): " + result);
    return result;

这是调用 formatDate 函数的地方:

var duration = 1;
var startString = $("#inputDatetime").val();
var startObject = new Date(startString);

var endObject = startObject;
endObject.setHours(startObject.getHours() + duration);
var endString = formatDate(endObject);

setCookie("start", startString, 3600*60*24*30);
setCookie("end", endString, 3600*60*24*30);

Chrome 输出:

formatDate(): 2013-11-18 17:00:00

火狐输出:

formatDate(): NaN-NaN-NaN NaN:NaN:00

首选输出类似于 2013-11-21 16:00:00.

为了让所有浏览器都支持它,我必须进行哪些更改?

【问题讨论】:

在 Firefox 中运行良好。 在 ie 9 中为我输出“2013-11-15 10:55:00” 我不确定这怎么可能返回您报告的NaN 字符串。如果您传递的不是真正的 Date 实例,那么当您尝试调用所有那些(可能)不存在的方法时,它应该会失败。 MomentJS 可能会让你的生活更轻松一些。时刻(日期).format("YYYY-MM-DD HH:MM:SS") 你的 startString 在你的 FF 中是什么样子的?似乎 new Date(startString) 无法将 startString 解析为有效日期,因此您调用的所有方法都返回 NaN。 【参考方案1】:

问题是只有 Chrome 支持new Date(startDate)

我使用moment.js的解决方案:

var duration = 1;
var startString = $("#inputDatetime").val();

var endObject = moment(startString).add('hours',duration);
var endString = moment(endObject).format("YYYY-MM-DD HH:mm");

setCookie("start", startString, 3600*60*24*30);
setCookie("end", endString, 3600*60*24*30);

【讨论】:

【参考方案2】:

随便用

var startObject = new Date(startString.replace(/\-/g,'\/'));

【讨论】:

以上是关于formatDate JavaScript 函数仅适用于 Chrome的主要内容,如果未能解决你的问题,请参考以下文章

时间FormatDate自定义函数

一个方便的日期格式器

JS或者jQuery中怎么处理时间戳为Y-m-d 这样的格式

使用JS,时间戳数值怎么转换成日期

在 Promise 函数之前链 Javascript 函数仅基于初始函数调用

jquery将date有没有format函数