变量读数中的日期为"无效日期"

时间:2017-07-24 19:02:39

标签: javascript jquery ajax date

使用以下内容:

var timestart = $('.thisDiv').data("timestart");
var startDateTime = new Date(timestart);

从ajax更新的php文件中收集日期:

$TimeStart = date( 'Y,m,d,g,i', $TimeStart );

<div class="thisDiv" data-timestart="<?= $TimeStart ?>"></div>

var timestart = $('.thisDiv').data("timestart");

在控制台中,我在记录timestartstartDateTime时收到以下信息:

2017,07,24,7,50
Invalid Date

如果我粘贴输出的日期如下

var startDateTime = new Date(2017,07,24,7,50);

然后它工作正常。我知道为什么会收到无效日期?

2 个答案:

答案 0 :(得分:2)

您的timestart变量(JavaScript)只是一个字符串。所以它是一个字符串2017,07,24,7,50,而不是那些按顺序排列的元素 - 它们不能用作new Date()期望的单独参数。

我们来看看吧!

var startDateTime = new Date(2017,07,24,7,50);   // Parameters in order - all OK!
var startDateTime = new Date("2017,07,24,7,50"); // A single string - single parameter, not OK!

您需要从PHP返回适当格式的日期,格式在JavaScript中有效。根据ECMAScript标准,应在所有浏览器中使用的有效格式为YYYY-MM-DDTHH:mm:ss.sssZ(请参阅底部的参考)。要从PHP定义它,您需要将其格式化为

$TimeStart = date('c', $TimeStart);

这将返回2017-07-24T21:08:32+02:00等格式。

,您可以使用splat / spread-operator ...并将字符串拆分为元素,我认为这是比上面更好的方法。

var timestart = $('.thisDiv').data("timestart");  // Get the string: "2017,07,24,7,50"
timestart = timestart.split(",");                 // Split into array
var startDateTime = new Date(...timestart);       // Pass as arguments with splat-operator

答案 1 :(得分:0)

您需要将日期从字符串格式转换为数字。

var timestart = $('.thisDiv').data("timestart").split(",").map(Number);
var startDateTime = new Date(...timestart);
console.log(startDateTime)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="thisDiv" data-timestart="2017,07,24,7,50"></div>