将小时添加到仅显示NaN的新日期
add hours to new Date only showing NaN
当我在谷歌上搜索时,我知道有很多这样的问题,但我似乎无法让它发挥作用。我使用Safari作为我的浏览器,这对我来说是自OS X Yosemite以来的新功能。但是,我想不通这个。
使用Keith Wood倒计时插件,我所要做的就是从数据库中获取日期时间并添加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});
});
这看起来很简单,我试着把新的调整日期(额外的两个小时)重新定为新的日期,但这给了我同样的问题。
这是控制台中的输出:
带console.log(新日期(结束时间);
2014-10-24 19:48:01
无效日期
2014-10-24 19:39:14
无效日期
2014-10-24 19:30:23
无效日期
和:
带控制台.log(结束时间):
2014-10-24 19:56:14
NaN
22014-10-24 19:48:01
NaN
2014-10-24 19:39:14
NaN
2014-10-24 19:30:23
NaN
值得注意的是,我尝试了很多在约会中增加时间的例子,但都没有奏效,所以这个例子似乎是最合乎逻辑的,但我做错了。有什么想法吗?
更新
在下面的帮助下,我遇到了一些问题,也许我在解释时并没有真正弄清楚。
jquery(ajax)/php/database.php(echo)/jquery(ajax)周期中的日期如下所示:
2014-10-24 19:30:23
我不认为以上是一个有效的日期,而是一个字符串。我认为这是因为如果我加上这个:
newYear = new Date(value.added);
我得到无效日期。因此,无法评估任何getHours()请求,因此会产生错误。
我试着打破这个字符串,重新创建一个这样的新日期:
var dt = newYear.split(/'-|'s/);
endDate = new Date(dt[2] + '/' + dt[1] + '/' + dt[0] + ' ' + dt[3]);
console.log(endDate.getFullYear());
但以上给出了一个NaN。
我认为它是一个字符串的原因是,如果我放入以下代码:
if(String(value.added)){
console.log('isString Date')
} else {
console.log('is Not String Date')
}
控制台打印isString日期
这就解释了为什么倒计时有效,但没有给出准确的时间。数据库是mySQL。
那么,这是因为时间是通过php传递的,然后JS,因为数据库的列被设置为datetime吗?
以防万一,我用问题的最后一次更新进行了测试,并添加了"T"来修复问题:
var newYear = new Date(value.added.replace(" ", "T"));
这应该能解决问题。由于最多应该有一个空间,因此不需要任何额外的测试。
更新作为我的第一个答案是假设开始日期无效。结束日期实际上是个问题:
var endtime = newYear.setHours(newYear.getHours() + (2));
这当然是在冒险,因为它可能不适用于所有的实现。另外,它直接修改newYear,所以我不认为创建新变量有什么意义。
我建议以下方法来解决问题:
var endtime = new Date(newYear.getTime() + 7200000);
其中7200000是2*60*60*1000,或者2小时内的毫秒数。
根据ECMAScript 5,使用parse()
函数(15.9.4.2)解析日期格式
这告诉您,该语言试图将字符串转换为类似于x.toUTCString()
生成的格式,这应该是您在输出中显示的格式。这应该与简化的ISO 8601格式相匹配,而不需要日期和时间之间的"T":
YYYY-MM-DD HH:mm:ss.sssZ
据我所知,.sssZ
不是必需的,但你可以尝试这样的东西:
var newYear = new Date(value.added + ".000Z");
您可能还需要检查15.9.5.42 toUTCString()
和15.9.5.43 toISOString()
。
然而,如果您说您之前使用toUTCString()
从Date
对象中提取了一个字符串,并且返回的转换失败,那么JavaScript实现中存在一个错误,因为ECMAScript明确表示,这样的往返应该返回完全相同的值:
如果x是ECMAScript的特定实现中毫秒数为零的任何Date对象,那么如果引用的所有属性都有其初始值,则以下所有表达式都应该在该实现中产生相同的数值:
x.valueOf()
Date.parse(x.toString())
Date.parse(x.toUTCString())
Date.parse(x.toISOString())
- 新的日期函数javascript
- JavaScript日期接收为像这次旅行一样的对象.日期:“/日期(1426530600000)/”;
- 根据组合框中的值获取新的日期值
- 新的日期()可以在节点.js中发生内存泄漏吗?
- 将变量日期与 if/else 语句中的日期(日期字符串)进行比较
- 新的日期()格式
- 如何将日期分配给新的日期对象
- C# datetime 到 JavaScript 日期与新的日期或数据解析
- JavaScript 新日期(日期)返回错误的日期
- Firefox 31.0:新的日期解析问题
- 更改新的日期格式
- 新的日期更改小时值
- 新的日期()12/24小时格式的JavaScript
- typeof == "undefined"比较日期,新的日期,数学.这个简单的js代码有什么问题?
- jQuery从当前日期的秒数计算新的日期
- 新的日期,如何设置默认年份
- Javascript:新的日期,丢失的年份
- 新的日期() 取决于操作系统
- Javascript创建变量的html代码与一个新的日期变量
- 茉莉花间谍在javascript上新的日期