【问题标题】:returning the number of days between 2 dates is not working返回两个日期之间的天数不起作用
【发布时间】:2019-03-13 16:02:08
【问题描述】:

我有一个从 json 文件中提取日期的小代码。 并返回到期前剩余的天数。

它如何在控制台日志中返回 NaN

var start = "2019/03/12";
var end = "2020/03/12";
days = (end- start) / (1000 * 60 * 60 * 24);
console.log(Math.round(days));

这应该是正确的。但它不起作用。

【问题讨论】:

标签: javascript jquery date time


【解决方案1】:

您需要将endstart 更改为Date

var start = "2019/03/12";
var end = "2020/03/12";
days = ( new Date(end)- new Date(start) ) / (1000 * 60 * 60 * 24);
console.log(Math.round(days));

【讨论】:

  • 非常感谢。我将在 13 分钟内标记为正确。
  • 请记住,这并不适用于任何地方。 字符串 "2020/03/12" 的解析到您期望的日期将取决于用户的位置。也就是说,这是 12 月 3 日的 3 月 12 日吗?更好的解决方案是使用 moment.js
  • 要添加到@Liam 的评论中,您可以使用toLocaleString 来解决这个问题。
【解决方案2】:

试试这个...使用 Date 对象

var start = new Date("2019/03/12");
var end = new Date("2020/03/12");
days = (end - start) / (1000 * 60 * 60 * 24);
console.log(Math.round(days));

【讨论】:

  • 有效,但缺乏解释。不辜负您的用户名;)
  • 那里,补充说明
【解决方案3】:

您必须将字符串日期转换为 javascript 日期,但总体而言,我建议使用 moment,因为 javascript 日期可能会很痛苦

要将您的字符串转换为 javascript 日期类型,您可以这样做

var mydate = new Date('2011-04-11T10:20:30Z'); // <--- you have to format it

方法 2)

new Date('2011', '04' - 1, '11', '11', '51', '00')

如果你想使用 moment,你可以这样做:

var mydate = moment("2014-02-27T10:00:00").format('DD-MM-YYYY'); // <-- here inside the format function you can define how your string get's parsed

【讨论】:

  • Moment 很棒,但是对于这个特定的示例,它不是必需的。其他答案很简单。
  • @Liam toLocaleString() 无需加载外部库即可解决此问题。不要误会我的意思,我喜欢时刻,并且可能会自己使用它来做类似的事情。
  • 是的,那是真的,时刻很棒,我通常用它来计算时间,但当然,如果你有一个 javascript 日期,你可以随时查看时间戳并用它计算。日期计算的最佳函数是具有时间跨度和日期时间类型的 dotnet,moment 应该朝着这个方向改进,javascript 应该在其语法中默认包含 moment
  • you have to format it 之所以有效,是因为它是一个总是有效的ISO-8601日期字符串
  • 在这种情况下你是对的@Liam,但我想总体上指出它需要特定的格式才能工作
【解决方案4】:

使用moment.jsdiff 函数。但是你必须在使用前对其进行格式化。

const format = date => date.replace(/\//g, '-') 

var start = moment(format("2019/03/12"));
var end = moment(format("2020/03/12"));

console.log(end.diff(start, 'days'))
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 我不知道为什么这个被否决了。你有我的支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 2019-12-17
  • 2019-12-24
相关资源
最近更新 更多