【问题标题】:Calculate number of weeks , days and hours from milliseconds从毫秒计算周数、天数和小时数
【发布时间】:2012-02-23 04:57:27
【问题描述】:

周围有很多类似的问题,但没有一个解决这个计算问题。使用 javascript i 很容易找到前 2 个日期的毫秒数差异:

var mil = Math.floor(new Date("1/1/2012")  - new Date("1/7/2012"))

mil 被分配518400000

为了得到几个星期我会在下面做

var weeks = mil / (1000*7*24*60*60);

在上面的例子中,它正好适合1 周。对于其他可能的输入,我希望输出为 ex:

n Weeks, y days , z hours

所以我做了mil % (1000*7*24*3600) 来获取模数并从余数计算天数。但令人惊讶的是,这是我从控制台得到的答案 1 weeks , 6 days 好像之前计算的一周也算天了。

我应该如何正确计算这些?

【问题讨论】:

    标签: javascript date hour days


    【解决方案1】:
    var seconds = (mil / 1000) | 0;
    mil -= seconds * 1000;
    
    var minutes = (seconds / 60) | 0;
    seconds -= minutes * 60;
    
    var hours = (minutes / 60) | 0;
    minutes -= hours * 60;
    
    var days = (hours / 24) | 0;
    hours -= days * 24;
    
    var weeks = (days / 7) | 0;
    days -= weeks * 7;
    

    假设mils 为非负数,则mils 在[0, 1000) 范围内,minutesseconds 在[0, 60) 范围内,hours 在范围内[0, 24),并将 days 留在 [0, 7) 范围内。

    【讨论】:

    • 这个计算更完美我很快放了一个 JSBin 并且它工作了谢谢jsbin.com/usigit/4
    • 您能否改进此版本以包含年份和月份以确保完整性。
    • @Deeptechtons,没有。月份和年份的长度不相等。
    • 我当然同意 ;) 我尝试了一只手,但由于闰年,一个月中的天数不相等,它变得更加复杂。如果所有月份都有 30 天,哈哈
    • @Deeptechtons,是的。 calendar reform 的历史虽然漫长而令人沮丧 :)
    【解决方案2】:

    他们之间应该有 6 天,而不是 1 周。您的周数计算需要向下取整:

    var weeks = Math.floor(mil / (1000 * 7 * 24 * 60 * 60));
    

    另外,您的毫秒数是负数;你也想要

    var mil = new Date("1/7/2012") - new Date("1/1/2012");
    

    var weeks = Math.floor(Math.abs(mil) / (1000 * 7 * 24 * 60 * 60));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多