是否有允许 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 而不是数学?
答案 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 小时”是有意义的:
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);