Javascript:如何将n分钟添加到unix时间戳

时间:2013-04-26 15:42:07

标签: javascript datetime

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

使用javascript我需要:

  1. 将时间戳转换为字符串格式小时:分钟(09:00)
  2. 在时间戳上添加n分钟:时间戳+ 75分钟
  3. 我尝试了moment.js库:

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

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

3 个答案:

答案 0 :(得分:10)

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

timestamp += 75 * 60

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

var hours = Math.floor(timestamp/60/60),
    mins = Math.floor((timestamp - hours * 60 * 60) / 60),
    output = hours%24+":"+mins;

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

因此,您希望在添加一些时间间隔(特别是分钟)后,将您拥有的时间戳 timestamp 转换为 区域设置时间字符串

无论您有种类日期时间字符串还是一种纪元毫/秒,只需创建一个Date对象:< /p>

const date = new Date(timestamp);

请记住,您需要做的是将一些数字(您的情况:分钟)添加/减去另一个数字,而不是一些日期对象或一些日期时间字符串< /em>,该数字是您约会的 纪元 mili/secods。因此,您总是需要以毫/秒为单位的日期的数字表示。 JavaScript Date.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 方法,这些都在 Date.prototype 上:

  1. toString
  2. toDateString
  3. toTimeString
  4. toLocaleString
  5. toLocaleDateString
  6. toLocaleTimeString
  7. toIsoString
  8. toUTCString
  9. toGMTString
  10. toJSON