【问题标题】:Javascript: how to calculate the beginning of a day with milliseconds?Javascript:如何以毫秒计算一天的开始?
【发布时间】:2012-06-22 02:43:35
【问题描述】:

我想算出从一天开始的时间,以毫秒为单位。

所以说我得到了这个:1340323100024,这就像 2012 年 6 月 21 日的中午。现在我想要从一天开始的毫秒数,这将是 1340262000000 (至少我认为这是应该的。)

我如何从 1340323100024 得到 1340262000000?

我试过了

Math.floor(1340323100024/86400000) * 86400000 

但这给了我 1340236800000,如果我用它创建一个日期对象,则表示它是 20 号。

我知道我可以从 1340323100024 创建一个日期对象,然后获取月、年和日期,以创建一个新对象,它会给我 1340262000000,但我觉得这很荒谬,我无法弄清楚这么简单的事情。

任何帮助将不胜感激。

顺便说一句,如果有什么不同,我会在 javascript 中执行此操作。

【问题讨论】:

  • 这将取决于时区。
  • 知道怎么做,但你不想因为你“觉得很可笑”?我认为你应该做你刚才描述的!日期和时间工作是一个非常棘手的主题,尤其是在时间戳和实时之间跳转时。尽量使用内置功能!

标签: javascript date time milliseconds


【解决方案1】:

我同意 Thilo(本地化到时区),但我可能会这样处理:

// Original: Thu Jun 21 2012 19:58:20 GMT-0400 (Eastern Daylight Time)
var ms = 1340323100024;
var msPerDay = 86400 * 1000;
var beginning = ms - (ms % msPerDay);
// Result:    Wed Jun 20 2012 20:00:00 GMT-0400 (Eastern Daylight Time)

或者,如果您愿意:

Number.prototype.StartOfDayMilliseconds = function(){
  return this - (this % (86400 * 1000));
}

var ms = 1340323100024;
alert(ms.StartOfDayMilliseconds());

编辑

如果您对时区比较挑剔,可以使用:

// Original: Thu Jun 21 2012 19:58:20 GMT-0400 (Eastern Daylight Time)
var ms = 1340323100024;
var msPerDay = 86400 * 1000;
var beginning = ms - (ms % msPerDay);
    beginning += ((new Date).getTimezoneOffset() * 60 * 1000);
// Result:    Thu Jun 21 2012 00:00:00 GMT-0400 (Eastern Daylight Time)

请注意,现在已删除偏移量,因此前一天晚上 8 点变成时间戳上实际日期的午夜。您也可以(取决于实现)在您对一天的开始取模之前或之后进行加法 - 您的偏好。

【讨论】:

  • 正在尝试找出排除时区的方法,所以请稍等... ;p
  • 我什至没有想到这一点.. 但我用我正在使用的各种毫秒测试它并且它有效。
  • @conman:FWIW,我得到了一个考虑时区的版本。 ;-)
  • 你太棒了!我正在研究更多以完全理解它。但是,是的,看起来 Thilo 是对的,它确实很棘手。非常感谢!
【解决方案2】:
var d = new Date();
var date = d.toISOString().split("T")[0];
var date_ms = new Date(date).getTime();

或一行答案

console.log(new Date(new Date().toISOString().split("T")[0]).getTime());

【讨论】:

    【解决方案3】:

    其实应该是(currTimeMilli - 18000000) % 864000000 来获取GMT+5从一天开始的毫秒数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 2012-06-12
      • 1970-01-01
      • 2013-05-05
      相关资源
      最近更新 更多