Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
Javascript 将小时数添加到仅显示NaN的新日期_Javascript_Date - Fatal编程技术网

Javascript 将小时数添加到仅显示NaN的新日期

Javascript 将小时数添加到仅显示NaN的新日期,javascript,date,Javascript,Date,我知道当我在谷歌上搜索时,有很多这样的问题,我似乎无法让它工作。我使用Safari作为我的bowser,这对我来说是自OSX优胜美地以来的新鲜事。但是,我无法理解这一点 我所要做的就是,使用KeithWood倒计时插件,从数据库中获取一个日期时间,并添加2个小时。代码如下: $(data).each(function(key, value) { var box = ''; box += '<div class="outterBox" id="qBox'+value.qi

我知道当我在谷歌上搜索时,有很多这样的问题,我似乎无法让它工作。我使用Safari作为我的bowser,这对我来说是自OSX优胜美地以来的新鲜事。但是,我无法理解这一点

我所要做的就是,使用KeithWood倒计时插件,从数据库中获取一个日期时间,并添加2个小时。代码如下:

$(data).each(function(key, value) {

    var box = '';

    box += '<div class="outterBox" id="qBox'+value.qid+'" name="'+value.qid+'">'+value.question+'</div>';
    box += '<div id="timer'+value.qid+'"></div>';


    var newYear = new Date(value.added);
    var endtime = newYear.setHours(newYear.getHours() + (2));

    console.log(value.added);
    console.log(endtime);

    $('#listQuestions').append(box);
    $('#timer'+value.qid).countdown({until: endtime});

});
我得到了无效的日期。因此,无法计算任何getHours()请求,因此会给出一个错误

我试着分解字符串,重新创建一个新的日期,如下所示:

var dt  = newYear.split(/\-|\s/);
endDate = new Date(dt[2] + '/' + dt[1] + '/' + dt[0] + ' ' + dt[3]);
console.log(endDate.getFullYear());
var newYear = new Date(value.added + ".000Z");
但是上面给了我一个NaN

我之所以认为它是字符串,是因为我输入了以下代码:

if(String(value.added)){
                console.log('isString Date')
            } else {
                console.log('is Not String Date')
            }
控制台打印i字符串日期

这就解释了为什么倒计时有效,但不能给出准确的时间。数据库是mySQL


这是因为时间是通过php传递的,然后JS,因为database is列被设置为datetime?

以防我使用问题的最后一次更新进行测试,并添加“T”修复了问题:

var newYear = new Date(value.added.replace(" ", "T"));
var endtime = newYear.setHours(newYear.getHours() + (2));
var endtime = new Date(newYear.getTime() + 7200000);
这应该可以解决问题。因为最多应该有一个空间,所以不需要进行任何额外的测试


更新为我的第一个答案是假设开始日期无效。结束日期实际上是个问题:

var newYear = new Date(value.added.replace(" ", "T"));
var endtime = newYear.setHours(newYear.getHours() + (2));
var endtime = new Date(newYear.getTime() + 7200000);
这当然是在冒险,因为它可能不适用于所有实现。另外,它直接修改新年,所以我不会看到创建新变量的意义

我建议采用以下方法解决此问题:

var newYear = new Date(value.added.replace(" ", "T"));
var endtime = newYear.setHours(newYear.getHours() + (2));
var endtime = new Date(newYear.getTime() + 7200000);
其中7200000是2*60*60*1000,或2小时内的毫秒数


根据ECMAScript 5,使用
parse()
函数(15.9.4.2)解析日期格式

这告诉您,该语言尝试使用类似于
x.toutString()
将产生的格式转换字符串,这应该是您在输出中显示的格式。这应与简化的ISO 8601格式相匹配,不需要在日期和时间之间使用“T”:

YYYY-MM-DD HH:mm:ss.sssZ
据我所知,
.sssZ
不是必需的,但您可以尝试以下方法:

var dt  = newYear.split(/\-|\s/);
endDate = new Date(dt[2] + '/' + dt[1] + '/' + dt[0] + ' ' + dt[3]);
console.log(endDate.getFullYear());
var newYear = new Date(value.added + ".000Z");
您可能还需要检查
15.9.5.42 toutString()
15.9.5.43 toISOString()

但是,如果您说您以前使用
toutString()
Date
对象提取了字符串,并且返回的转换失败,那么该JavaScript实现中就存在一个错误,因为ECMAScript清楚地指出,这样的往返应该返回完全相同的值:

如果x是ECMAScript的特定实现中毫秒数为零的任何日期对象,则如果引用的所有属性都有其初始值,则以下所有表达式应在该实现中生成相同的数值:


什么是
console.log(新年)给你?它看起来像
值。添加的
不是日期构造函数的有效参数。Date的构造函数需要一个格式为特定方式()的字符串,或者一个表示从大纪元开始的毫秒数的数字。@Matthewstrobbridge newYear给我“2014-10-24 19:30:23”@Sacho value.added被转换为一个新的日期,所以这不会改变数据库存储的内容,进入正确的结构?哪里是
value.added
变为日期?来自什么?效果如何?尝试发布所有代码的示例,例如在JSFIDLE上。或者,学习如何使用chrome的调试器工具并找出事物的实际值。
value.added+'.000Z'
outputs 2014-10-24 20:14:30.000Z<代码>新日期(value.added+'.000Z')
输出无效日期
newYear.setHours(newYear.getHours())+2
。对我来说没什么意义:(可能还值得注意的是,仅使用
value.added
就可以为我提供正确的日期/时间,并且可以使用倒计时插件。啊。感谢您指出问题出现在结束日期。我现在在您的问题中清楚地看到了这一点。我更新了我的答案,并针对该特定点进行了修复,尽管您可能需要在wh中使用Unix时间。)很明显,我的情况是你不必做
新建日期(…)
。我已经更新了我的问题,这可能会有更多帮助。好的,我添加了一个更新。修复方法似乎只是在日期和时间之间添加“T”。PHP/AJAX实际上只能返回字符串。字符串如
“33”
将自动转换为一个数字(使用+运算符除外,在这种情况下,您可能会得到一个串联)。有一种方法可以获得这样的数字:使用JSON转换接收到的数据,包括源文档中定义的字符串和数字,以及对象和数组(但仍然没有日期)。