gpt4 book ai didi

javascript - 将小时添加到新日期仅显示 NaN

转载 作者:行者123 更新时间:2023-12-03 11:34:43 24 4
gpt4 key购买 nike

我知道当我用谷歌搜索时有很多这样的问题,但我似乎无法让它发挥作用。我使用 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});

});

这看起来很简单,我尝试将新的调整后的日期(额外的两个小时)再次设置为新的日期,但这给了我同样的问题。

这是控制台中的输出:

With console.log(new Date(endtime);

2014-10-24 19:48:01

Invalid Date

2014-10-24 19:39:14

Invalid Date

2014-10-24 19:30:23

Invalid Date

和:

With 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传递的,因为数据库列设置为日期时间?

最佳答案

以防万一我用问题的最后更新进行了测试,并添加“T”解决了问题:

var newYear = new Date(value.added.replace(" ", "T"));

这应该可以解决问题。由于最多应该有一个空格,因此不需要任何额外的测试。

<小时/>

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

var endtime = newYear.setHours(newYear.getHours() + (2));

这肯定是有风险的,因为它可能不适用于所有实现。另外,它直接修改 newYear,所以我不会看到创建新变量的意义。

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

var endtime = new Date(newYear.getTime() + 7200000);

其中 7,200,000 是 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 明确表示这样的往返应该返回完全相同的值:

If x is any Date object whose milliseconds amount is zero within a particular implementation of ECMAScript, then all of the following expressions should produce the same numeric value in that implementation, if all the properties referenced have their initial values:

  x.valueOf()
Date.parse(x.toString())
Date.parse(x.toUTCString())
Date.parse(x.toISOString())

关于javascript - 将小时添加到新日期仅显示 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26571702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com