Javascript日期函数ISO8601

时间:2016-11-06 10:52:33

标签: javascript date iso8601

我以为我有一个标准的ISO日期和Javascript Date()函数应该转换它没有解析,但我得到以下内容:

我的约会对象:

2015-12-08T13:42

Javascript日期函数结果:

Tue Nov 12 2075 13:42:00 GMT+0100

我的日期是不正确的格式还是我误解了数据功能?

我应该补充一点,我使用的是Adobe Illustrator CS6。我从下面尝试了一些例子,得到了相同的结果:

My code:
var start = '2015-12-08T13:42';
var test0 = new Date(start);
var test1 = new Date(start+'Z').toString();
$.writeln(test0);
$.writeln(test1);

结果:

Tue Nov 12 2075 13:42:00 GMT+0100
Tue Nov 12 2075 13:42:00 GMT+0100

3 个答案:

答案 0 :(得分:1)

要将UTC时间指定为字符串,您需要将Z部分添加到其中。

引自Wikipedia

  

如果没有给出时间表示的UTC关系信息,则假定时间是当地时间。

     

如果时间是UTC,请在没有空格的时间后直接添加Z. Z是零UTC偏移的区域指示符。

我在Firefox和时区GMT + 01:00中运行以下代码段时看到了不同之处。但Edge和Chrome显示第一个输出也好像Z在那里(这似乎与上面的引号相反),因此没有可见的区别:



var s = '2015-12-08T13:42';

console.log(new Date(s).toString());
console.log(new Date(s+'Z').toString());




确保将Date值转换为字符串的方式是正确的。 toString()调用(在代码段中使用)将转换为当前区域设置的日期/时间。

但是如果您使用自定义函数,则需要注意一些陷阱。例如,如果您使用getMonthgetUTCMonth方法检索给定日期的月份编号,请注意它是从零开始的,因此12月份编号为11.如果您的字符串转换将此11解释为11月,您将关闭一个月。

答案 1 :(得分:0)

我认为你将日期设置为setUTCDate函数如果你将当前日期传递给setUTCDate函数就会出错日期

        <!DOCTYPE html>
        <html>
        <body>

        <p id="demo"></p>

        <script>
        function myFunction() {
            var d = new Date();
            d.setUTCDate(2015-12-08);
            document.getElementById("demo").innerHTML = d;
        }
        </script>

        </body>
        </html>

if you want get current date use  Date() function

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>

document.getElementById("demo").innerHTML = Date();
</script>

</body>
</html>

答案 2 :(得分:0)

  

我以为我有一个标准的ISO日期和Javascript Date()函数应该转换它没有解析,

要将字符串转换为日期,必须对其进行解析,否则无法避免。

  

但我得到以下内容:   我的约会 :   2015-12-08T13:42

     

Javascript日期函数结果:

     

Tue Nov 12 2075 13:42:00 GMT + 0100

     

我的日期是不正确的格式还是我误解了数据   功能

除了这一年,这是预期的结果。从ES5开始,ISO 8601格式的日期字符串由Date构造函数解析(和Date.parse,它们等同于解析)。

普通日期字符串(例如2015-12-08)应解析为UTC。如果没有提供时区,或者使用提供的时区,则应将日期和时间解析为本地。

字符串“2015-12-08T13:42”没有时区,因此将使用主机时区设置对其进行解析,以生成相当于2015年12月8日当地日期和时间的日期1 :下午42点。因此,它将代表每个时区中具有不同偏移的不同时刻。

强烈建议不要使用Date构造函数解析字符串,因为它主要依赖于实现,要么编写一个简单的函数,要么使用库。您没有说您是否希望将字符串解析为本地或UTC,这是一个简单的函数来解析它是UTC:

// 2015-12-08T13:42

function parseISOAsUTC(s) {
  var b = s.split(/\D/);
  return new Date(Date.UTC(b[0], --b[1], b[2], b[3], b[4], b[5]||0));
}

var d = parseISOAsUTC('2015-12-08T13:42');
console.log('Local: ' + d.toLocaleString() +
            '\nUTC:   ' + d.toISOString());

您应该添加一些验证来处理超出范围的值。