如何从日期时间获取 24:XX 时间?

时间:2021-02-02 19:57:56

标签: javascript typescript datetime

是否有允许 24 小时制表示在 24:XX 是有效时间的地方滚动的日期时间格式?

例如

const secondsToTimeOfDay = (totalSeconds: number): string => {
  return new Date(totalSeconds * 1000).toISOString().substr(11, 8);
};

var x = secondsToTimeOfDay(86399)
console.log(x)

退货

23:59:59

但是当秒数大于 86400(一天中的秒数)时,它从第二天开始?

示例

var x = secondsToTimeOfDay(87000)
console.log(x)

退货

00:10:00

是否有以 24:xx 格式返回的日期格式

示例(我知道这可行,但我想知道是否可以使用某种内置日期对象来完成)

const SomeNewFunction = (totalSeconds: number): string => {
  var duration = 1000*totalSeconds
  var milliseconds = parseInt((duration % 1000) / 100),
    seconds = Math.floor((duration / 1000) % 60),
    minutes = Math.floor((duration / (1000 * 60)) % 60),
    hours = Math.floor((duration / (1000 * 60 * 60)));

  hours = (hours < 10) ? "0" + hours : hours;
  minutes = (minutes < 10) ? "0" + minutes : minutes;
  seconds = (seconds < 10) ? "0" + seconds : seconds;

  return hours + ":" + minutes + ":" + seconds;
}    

var x = SomeNewFunction(87000)
var y = SomeNewFunction(97000)
console.log(x)
console.log(y)

退货

24:10:00
26:56:40

SomeNewFuntion 在哪里使用某种 DateTimeObject 而不是数学?

1 个答案:

答案 0 :(得分:2)

JavaScript Date 对象代表世界历史上的一个瞬间,包括日期和时间。虽然您可以忽略显示中的日期部分,但它始终存在 - new Date(300000) 不代表“任何一天的 00:05:00”,它代表“1970 年 1 月 1 日的 00:05:00 , 根据 UTC"。

由于 1970 年 1 月 1 日没有第 25 小时和第 26 小时,因此您要求的格式没有意义。换句话说,“2 月 2 日 02:00”和“2 月 1 日 26:00”是同一时刻,但是(如果我理解正确的话)您希望能够清楚地表示它们。

有一些与时间相关的对象,其中“第 26 小时”是有意义的:

  • “持续时间”,表示绝对时间量,与发生时间无关。
  • 一个“间隔”,代表两个特定时刻之间的时间跨度。
  • “一天中的某个时间”,在某些特殊情况下,出于计划目的,您希望将“一天”持续超过 24 小时。

JavaScript 目前没有任何这些内置功能,尽管有一些库可以,并且 a proposal for adding them natively

大多数“一天中的时间”实现可能不允许一天中超过 24 小时,但您可以使用“持续时间”或“间隔”来表示它。最终结果可能如下所示:

var timetableEntry = {
    "date": Temporal.PlainDate.from({year: 2006, month: 8, day: 24}),
    "startOffsetFromMidnight": Temporal.Duration.from({ hours: 23, minutes: 30 }),
    "endOffsetFromMidnight": Temporal.Duration.from({ hours: 26, minutes: 30 })
}

var journeyDuration = timetableEntry.endOffsetFromMidnight.subtract( timetableEntry.startOffsetFromMidnight );
var startDateTime = timetableEntry.date.add( timetableEntry.startOffsetFromMidnight );
var endDateTime = timetableEntry.date.add( timetableEntry.endOffsetFromMidnight);