Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
yyyy mm ddThh:mm:ss偏移量中的Javascript日期转换不正确_Javascript_Date_Datetime - Fatal编程技术网

yyyy mm ddThh:mm:ss偏移量中的Javascript日期转换不正确

yyyy mm ddThh:mm:ss偏移量中的Javascript日期转换不正确,javascript,date,datetime,Javascript,Date,Datetime,我的日期如下: 2016-04-13T09:57:21-04 我正在尝试将其转换为javascript日期: event.timestamp = new Date(event.timestamp); 其中event.timestamp是日期的字符串表示形式。问题是,这被设置为已转换为未定义。我几乎可以肯定我的datetime是一种有效的ISO格式。我做错了什么 编辑 有些人注意到DATETIME是无效的,我同意JavaScript不这么认为,但是我从Scala API调用< /P>生成DATE

我的日期如下:

2016-04-13T09:57:21-04

我正在尝试将其转换为javascript日期:

event.timestamp = new Date(event.timestamp);
其中event.timestamp是日期的字符串表示形式。问题是,这被设置为已转换为未定义。我几乎可以肯定我的datetime是一种有效的ISO格式。我做错了什么

编辑

有些人注意到DATETIME是无效的,我同意JavaScript不这么认为,但是我从Scala API调用< /P>生成DATESTIME。 使用jodatime:

DateTime.now()


因此,这将生成一个有效的日期时间(至少对于scala)。-04是偏移量。我不是在争论日期时间在Javascript中是否有效,因为这是显而易见的我很好奇是否有一种方法可以使它对javascript有效,因为jodatime日期库在Java和Scala中似乎非常标准,我假设有一种方法可以使它与javascript一起工作。

编辑2 Thriggle的答案是正确的,但您也可以使用Moment以正确的格式获取日期:

moment(event.timestamp, "YYYY-MM-DD HH:mm Z").toDate();

moment可以按照我的格式读取日期时间(2016-04-13T09:57:21-04)

日期时间字符串应该是ISO 8601扩展格式的简化:YYYY-MM-DDTHH:MM:ss.sssZ

发件人:

Z是指定为“Z”(UTC)或“+”或“-”后跟时间表达式HH:mm的时区偏移量

因此,您的值应该是
2016-04-13T09:57:21-04:00


编辑:正如RobG在评论中敏锐地指出的那样,ECMAScript 2015只指定日期时间字符串遵循ISO 8601格式;虽然在本篇文章中它包含在中,但它不是规范的一部分。

强烈建议您不要使用日期构造函数或Date.parse来解析字符串。这种行为在很大程度上依赖于实现,并且不一致。您应该使用库中的解析器,或者如果您只支持一种或两种格式,则编写您自己的解析器(3或4行带验证的代码)

在使用moment.js的情况下:

moment(event.timestamp, "YYYY-MM-DD HH:mm Z").toDate();
一串

"2016-04-13T09:57:21-04"
格式指定不正确(缺少秒数),因此无法正确解析格式(秒数设置为零)。此外,时区被指定为GMT,而GMT不是,但由于偏移量不包括在格式中,因此字符串被解析为本地

因此,无论用户时区如何,所有用户都将看到完全相同的日期和时间,但其主机时区偏移量(因此每个不同偏移量的时间点不同)

根据moment.js文档,它应该正确解析给定的字符串:

moment('2016-04-13T09:57:21-04', "YYYY-MM-DD HH:mm:ssZZ").toDate();
但事实并非如此。要让moment.js正确解析它,唯一的方法是:

moment('2016-04-13T09:57:21-0400', "YYYY-MM-DD HH:mm:ssZZ").toDate());

i、 e.将“00”添加到时区偏移


传递格式的第一种方法更为可取,否则您将依赖于moment.js尝试不同的格式,直到返回有效日期或将其指定给date.parse。

日期无效。尝试新日期(“2016-04-13T09:57:21-04”);你自己看看。问题是
-04
是否要设置时区?日期末尾的“-04”是什么?请看此链接,-04是偏移量注意,即使使用moment.js,您仍然没有正确解析字符串,它被视为本地字符串(可能您在时区UTC-0400,所以请不要注意)。这不是Scala应用程序给我的。我是否需要将Scala中的每个日期转换为不同的字符串才能使用javascript?@PepperedLemons除非有办法让Scala应用程序提供包含分钟的完整ISO日期字符串,否则您需要将字符串转换为有效值,然后直接插入javascript。这很公平。我可以随时解决它。谢谢你的邀请help@Thriggle,将获取当前日期时间视为Java中的ISO 8601字符串。@Thriggle JavaScript中的日期时间处理与几乎所有编程平台一样非常有限和薄弱。Java中的Joda时间库是第一个以复杂方式处理日期时间的成功尝试。后来作为NodaTime移植到.Net。Joda Time现在已经被内置在Java8和更高版本中的java.Time框架所取代,它具有到Java6和7以及到Android的后端口。
moment('2016-04-13T09:57:21-0400').toDate());