【问题标题】:Javascript: Set a new Date to tomorrow 8amJavascript:将新日期设置为明天早上 8 点
【发布时间】:2016-07-09 13:33:12
【问题描述】:

我想制作一个 Javascript 日期对象,例如。 var now = new Date().getTime() 设置为“明天早上 8 点”,我将如何实现?

【问题讨论】:

标签: javascript date


【解决方案1】:

您可以执行以下操作:

var now  = new Date();
now.setDate(now.getDate() + 1)
now.setHours(8);
now.setMinutes(0);
now.setMilliseconds(0);

也检查this

你也可以:var now = Date("2016-03-23T8:00:00");

还有var now = new Date(2016,03,23,8,0,0,0 );

【讨论】:

  • 如果我在使用你的第一个代码块时没有记错,分钟和秒将是当前的(即如果闹钟设置在 17:35,它会在第二天响起8:35)
  • 此外,您似乎无法链接这些调用:-(
  • 我的信息来自w3schools。以上似乎是有效的。
  • w3schools 在这里名声不好。虽然我相信他们的大部分内容都是正确的,而且绝对是用户友好的,但我多次听说他们发布了错误的内容,并且花了很长时间来回应批评并删除错误。让我们回到源头:ECMA 规范。这里是Date.prototype.setHours。我们可以看到两件有趣的事情:首先,它返回一个TimeClip,它在上面被定义为一个整数。所以没有链接可能,因为你会打电话给<number>.setMinutes
【解决方案2】:

如果你有很多日期算法,我只能强烈推荐使用moment.js

使用此库,您的代码将与 moment().add(1, 'days').hours(8).startOf('hour') 一样短。

moment.js 与包裹 JS 日期的“moment”对象一起工作,以提供额外的方法。 moment() 调用返回当前日期时间的时刻,因此 moment.js 等效于 new Date()
从那里我们可以使用 moment.js 方法,如 add(quantity, unit) ,它将持续时间添加到前一个日期。所有这些操作方法都返回一个修改的时刻,这意味着我们可以将它们链接起来。
hours() 方法既是 getter 也是 setter 取决于其参数;在这里,我们为其提供了一个数字,这意味着我们将时刻的小时部分设置为 8。调用 .hours() 会改为返回当前小时部分。
startOf(unit) 返回单位开始时的时刻,这意味着它将所有较小的单位设置为 0:moment().startOf('day') 将返回今天的上午 00:00。

【讨论】:

  • 没有moment.js标签,问题中也没有提到它,因此答案应该使用纯js解释它是如何工作的。
  • 你从哪里得出这些规则?有什么可以解释的方法名称或快速检查提供的链接并不明显? Rana 已经提供了一个简单的 JS 答案,如果你检查它的 cmets 并进行编辑,你会看到我试图帮助它变得更好。我完全赞成建设性的批评,但我认为我对您的反馈无能为力。
猜你喜欢
  • 1970-01-01
  • 2013-02-22
  • 2015-07-17
  • 2015-05-21
  • 1970-01-01
  • 2017-10-22
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多