14

我有一个 unix 时间戳:1368435600。持续时间以分钟为单位:例如 75。

使用 javascript 我需要:

  1. 将时间戳转换为字符串格式 hours:mins (09:00)
  2. 时间戳加 n 分钟:timestamp + 75mins

我尝试了 moment.js 库:

end_time = moment(start_time).add('m', booking_service_duration);

booking_service_duration 是 75,但增加了一个小时。我也宁愿不必使用另一个 js 库

4

3 回答 3

15

要添加 75 分钟,只需乘以 60 即可获得秒数,并将其添加到时间戳中:

timestamp += 75 * 60

要转换为小时:分钟,您将需要做更多的数学运算:

var hours = Math.floor(timestamp/60/60),
    mins = Math.floor((timestamp - hours * 60 * 60) / 60),
    output = hours%24+":"+mins;
于 2013-04-26T15:45:59.773 回答
5

Unix 时间是自 1970 年 1 月 1 日 UTC 以来经过的秒数。
要将该时间向前移动,您只需添加秒数。

所以一旦你有了分钟,新的时间戳就是oldTime + 60*minutes
对于转换查找解析库,有代码可以做一些研究。

于 2013-04-26T15:45:21.993 回答
0

因此,您想在添加一些时间间隔(特别是分钟)后将您拥有的时间戳转换timestamp语言环境时间字符串。

无论您有一种日期时间字符串还是一种纪元 mili/seconds,只需创建一个 Date 对象:

const date = new Date(timestamp);

请记住,因为您需要做的事情需要将一些数字(您的情况:分钟)添加/减去另一个数字,而不是某些日期对象或某些日期时间字符串,并且该数字是您日期的纪元 mili/secods。因此,您始终需要以英里/秒为单位的日期的数字表示。JavaScriptDate.prototype.getTime()确实返回您日期的纪元毫秒。用它:

const miliseconds = date.getTime();

添加多达毫秒:

const newMiliseconds = miliseconds + (75 * 60 * 1000);

之后,正如您所说,您需要一个日期时间字符串,以及其中的一部分;locale time string,你需要一直往回走;从数字到日期对象和日期时间字符串:

const newDate = new Date(newMiliseconds);
const newTimestamp = newDate.toString();

或者不是获取它的整个字符串,而是使用以下专门的方法来获取您直接喜欢的日期对象的字符串表示的格式/部分:

const newTimestamp = newDate.toLocaleTimeString(); // "12:41:43"

最后,您所要做的就是去掉最后一个分号和秒以获得小时:分钟格式:

const newHoursMins = newTimestamp.slice(0, -3);

更好地利用它:

function timestampPlus(timestamp, milisecondsDifference, toStringFunc = Date.prototype.toString) {
  const date = new Date(timestamp);
  const miliseconds = date.getTime();
  const newMiliseconds = miliseconds + milisecondsDifference;
  const newDate = new Date(newMiliseconds);
  const newTimestamp = toStringFunc.call(newDate); // a bit advanced stuff here to let you define once and use whatever kind to string method you want to use, defaults to toString()
  return newTimestamp;
}

我在这里留下了最终的格式。您也可以通过传递一个否定的第二个参数来使用它进行减法。请注意 seconds 参数以毫秒为单位,unix 时间戳会有所不同,并且可能以秒为单位提供给您,在这种情况下,您需要将其转换为毫秒或更改上述函数定义。

function timestampPlus(timestamp, milisecondsDifference, toStringFunc = Date.prototype.toString) {
      const date = new Date(timestamp);
      const miliseconds = date.getTime();
      const newMiliseconds = miliseconds + milisecondsDifference;
      const newDate = new Date(newMiliseconds);
      const newTimestamp = toStringFunc.call(newDate); // a bit advanced stuff here to let you define once and use whatever kind to string method you want to use, defaults to toString()
      return newTimestamp;
    }
console.log("new Date(1368435600*1000).toLocaleTimeString(): ", new Date(1368435600*1000).toLocaleTimeString())
console.log("timestampPlus(1368435600*1000, 75*60*1000, Date.prototype.toLocaleString): ", timestampPlus(1368435600*1000, 75*60*1000, Date.prototype.toLocaleTimeString))

除了你需要的,对于最后一个参数,toStringFunc你的选项会有所不同并包含所有相关Date的方法,它们是 on Date.prototype

  1. toString
  2. toDateString
  3. toTimeString
  4. toLocaleString
  5. toLocaleDateString
  6. toLocaleTimeString
  7. toIsoString
  8. toUTCString
  9. toGMTString
  10. toJSON
于 2021-07-06T10:02:56.013 回答