【发布时间】:2026-02-03 10:45:01
【问题描述】:
我知道当我用谷歌搜索时有很多这样的问题,但我似乎无法让它发挥作用。我使用 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(new Date(endtime);
2014-10-24 19:48:01
无效日期
2014-10-24 19:39:14
无效日期
2014-10-24 19:30:23
无效日期
和:
使用 console.log(endtime):
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 Date
这解释了为什么倒计时有效,但没有给出准确的时间。数据库是 mySQL。
是不是因为时间是通过php传递的,然后是JS,因为数据库是列设置为datetime?
【问题讨论】:
-
console.log(newYear);带给你什么? -
看起来
value.added不是 Date 构造函数的有效参数。 Date 的构造函数需要一个以特定方式格式化的字符串 (es5.github.io/#x15.9.4.2) 或表示自纪元时间以来的毫秒数。 -
@MatthewStrawbridge newYear 给我 '2014-10-24 19:30:23'
-
@Sacho value.added 被转换成一个新的日期,所以这不会改变数据库存储它的任何内容,进入正确的结构吗?
-
value.added在哪里变成了一个日期?从何而来?有什么效果?尝试发布所有代码的示例,例如在jsfiddle上。或者,学习如何使用 chrome 的调试器工具并找出事物的实际值。
标签: javascript date