new Date()没有返回mozilla中的当前时间

时间:2015-06-17 07:54:03

标签: javascript xforms

Google输出

  1. eventObject.srcElement.getValue()=" 2015-06-17T08:30:40.000"

  2. 新日期(eventObject.srcElement.getValue())= 2015年6月17日星期三14:00:40 GMT + 0530(印度标准时间)

  3. new Date()= Wed Jun 17 2015 12:53:03 GMT + 0530(India Standard Time)

  4. new Date(eventObject.srcElement.getValue())< = new Date() 假

  5. Mozilla输出

    1. eventObject.srcElement.getValue()=" 2015-06-17T08:30:00.000"
    2. new Date(eventObject.srcElement.getValue())= Date 2015-06-17T03:00:00.000Z
    3. new Date()= Date 2015-06-17T07:21:14.629Z
    4. new Date(eventObject.srcElement.getValue())< = new Date() 真
    5. 当我尝试通过日期选择器输入日期时,它不允许我选择超过当前时间的当前日期,但是当我给出少于当前时间并且它应该允许超过当前时间时它不应该允许。 (此功能在Chrome中运行良好)

      由于

1 个答案:

答案 0 :(得分:4)

不幸的是,这是因为TC-39委员会在定义ECMAScript5 standard date/time format时搞砸了一下:它们基于ISO-8601,但是说字符串上没有时区指示器默认到GMT(" Z")。但在ISO-8601中,没有时区指示符意味着本地时间。

他们在ECMAScript6中重新fixing this,所以现在我们处于令人不快的中间位置,即使出现错误,一些JavaScript引擎也会实施ES5规范(例如,在撰写本文时,Chrome ),以及其他人实施ES6规范(例如,在撰写本文时,Firefox)。

因此,通过Date对象跨浏览器可靠地解析该日期的唯一方法是向其添加时区指示符,以便明确无误。这是一个函数,用于检查字符串是否具有时区指示符,如果没有,则添加Z以便将其视为GMT并应用时区偏移量使其再次成为本地时间:



// Note: I'm not at all sure that does the right thing during the weird hour
// at the end of daylight savings time. I think it gets the *beginning*
// of DST right, and it's fine the rest of the time (no pun).
Date.fromSimpleISO = function(str) {
    var dt;

    if (str.substr(-1) === "Z" || /[+\-]\d{2}:\d{2}$/.test(str)) {
        // It has as timezone indicator, just pass it on
        dt = new Date(str);
    } else {
        // It should be local time: Parse as GMT, then apply offset
        dt = new Date(str + "Z");
        dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset());
    }
    return dt;
};
function test(str) {
  snippet.log(str + " => " + Date.fromSimpleISO(str));
}
test("2015-06-17T08:30:40.000");
test("2015-06-17T08:30:40.000Z");
test("2015-06-17T08:30:40.000+05:30");

<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;

当然,自己解析字符串,因为格式非常简单。或者使用像MomentJS这样的库来为你完成。