【问题标题】:Subtracting 100s of minutes accurately with Javascript使用 Javascript 准确减去 100 分钟
【发布时间】:2026-01-03 22:00:02
【问题描述】:

如果我有两个值,每个值代表一个日期,例如 YYYYMMDDHHMM (YearMonthDayHourMinute),例如:

202012141800
202012141614

我想在问题中表达的是,这给了我 186 分钟,但这并不准确,因为在一小时内 60 分钟内最后两位数永远不会大于 59。 186 中的 100 来自 18 小时(下午 6 点)和 16 小时(下午 4 点)。

如果两个时间戳相隔一个多小时,我如何在 Javascript 中减去这些以解释额外的 40 分钟?

我有这个,但效率不高,因为我需要知道两个时间戳可以分开的最大小时数:

        var end_time = $('#the-agenda li.current time').data('end-time'),
            time_now = current_display_number,
            timer_duration = end_time - time_now;

        if (timer_duration > 200) {
            // if more than 2 hours, subtract 80 minutes
            timer_duration = timer_duration - 80;
        }
        else if (timer_duration > 100) {
            // if more than 1 hour, subtract 40 minutes
            timer_duration = timer_duration - 40;
        }

我觉得答案可能在 this question's answer 中,但我不确定如何将 parseInt 应用于这种情况。

【问题讨论】:

  • YYYYMMDDHHMM 是一个 string 格式。永远不要把它当作一个数字。对于日期算术,将它们存储为适当的时间戳(例如,自纪元以来的分钟数)。如果您将字符串作为输入,parse it.
  • 这能回答你的问题吗? Converting a string to a date in JavaScript
  • @Bergi 您愿意扩展“永远不要将其视为数字”。使用下面 pwilcox 提供的解决方案,我能够让它按预期工作。但是,我必须首先使用 .toString() 将我拥有的内容转换为字符串。
  • @Nathan 是您用来检索 end_time 的 jQuery 吗? That's a problem。 (不过,在对其进行任何操作之前将其转换回字符串应该可以)。
  • 是的@Bergi,那部分是jQuery。您提供的链接确实提供了我很好奇的额外信息。谢谢!

标签: javascript


【解决方案1】:

你不会使用parseInt。您将使用Date.parse,但字符串必须采用预定义格式。如果不使用专门的库,您必须自己解析这些部分,然后使用这些部分创建一个新的 Date。幸运的是,虽然传入的字符串看起来很容易解析。做这样的事情:

let startTimeStr = '202012141614';
let endTimeStr = '202012141800';

let asDateTime = (d) => new Date(
  d.substring(0,4), 
  d.substring(4,6) - 1, 
  d.substring(6,8),
  d.substring(8,10),
  d.substring(10,12)
)

let startTime = asDateTime(startTimeStr);
let endTime = asDateTime(endTimeStr);

let result = (endTime - startTime) / 60000;

console.log(result);

【讨论】:

  • 完美,谢谢。对于其他可能使用它并遇到任何麻烦的人,我在控制台中得到了d.substring error: “is not a function”。这是因为当我将变量输入startTimeStr 时,它是一个数字,所以使用startTimeStr = my_var.toString() 解决了这个问题。
【解决方案2】:
// Different in milliseconds
const difference = (new Date('2020-12-14T18:00:00')) - (new Date('2020-12-14T16:14:00'));

const inMinutes = Math.floor(difference / 60000);

您需要将字符串格式转换为日期对象以获取准确的日期信息。

【讨论】:

  • OP的问题表明他的字符串是“YYYYMMDDHHMM”格式。这个答案不能满足他的需要。
  • OP 说“例如”,也没有在他们的代码示例中指定日期格式。
最近更新 更多