在 JavaScript 中将 Unix 时间戳转换为时间

IT技术 javascript date time time-format
2021-01-16 20:33:13

我将时间作为 Unix 时间戳存储在 MySQL 数据库中,然后发送到一些 JavaScript 代码。我如何才能抽出时间?

例如,在HH/MM/SS格式上。

6个回答

let unix_timestamp = 1549312452
// Create a new JavaScript Date object based on the timestamp
// multiplied by 1000 so that the argument is in milliseconds, not seconds.
var date = new Date(unix_timestamp * 1000);
// Hours part from the timestamp
var hours = date.getHours();
// Minutes part from the timestamp
var minutes = "0" + date.getMinutes();
// Seconds part from the timestamp
var seconds = "0" + date.getSeconds();

// Will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);

console.log(formattedTime);

有关 Date 对象的更多信息,请参阅MDNECMAScript 5 规范

@nickf乘法是微不足道的现代的CPU -字符串连接将需要大量更多的工作!
2021-03-21 20:33:13
实际上它将以“10:2:2”格式显示时间,因为它不会在低于 10 的值之前添加额外的 0。
2021-03-22 20:33:13
@Stallman 数字计算是计算机所做的最基本的事情,并且它们在内存和运行时都非常高效。Brilliand 上面的评论是相关的,尽管恕我直言,他评论的最后一部分完全是假的。
2021-03-22 20:33:13
@Stallman 这适用于所有语言(或几乎所有语言,理论上可以创建一种与此不同的异国语言 - 但所有常见语言都是)。字符串在内部存储为指向存储字符串内容的内存块的指针。指针本身使用的内存量与大多数数字在同一系统上使用的内存量相同,另外还有用于存储实际字符串的内存。然后,当您连接字符串时,您通常会使用两个字符串的组合内容创建一个全新的字符串。
2021-03-23 20:33:13
@ user656925 - 乘法涉及数字,串联涉及字符串。计算机处理数字的效率远远高于字符串。字符串连接完成后,后台会进行大量内存管理。(但是,如果您已经在进行字符串连接,那么在其中一个字符串中包含一些额外的字符实际上可能比将两个数字相乘所需的一个处理器操作成本更低。)
2021-04-07 20:33:13

function timeConverter(UNIX_timestamp){
  var a = new Date(UNIX_timestamp * 1000);
  var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
  var year = a.getFullYear();
  var month = months[a.getMonth()];
  var date = a.getDate();
  var hour = a.getHours();
  var min = a.getMinutes();
  var sec = a.getSeconds();
  var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ;
  return time;
}
console.log(timeConverter(0));

我使用了这个解决方案,但对其进行了调整,以便分钟和秒显示为 :03 或 :09 而不是 :3 或 :9,如下所示: var min = a.getMinutes() < 10 ? '0' + a.getMinutes() : a.getMinutes(); var sec = a.getSeconds() < 10 ? '0' + a.getSeconds() : a.getSeconds();
2021-03-11 20:33:13
对于 HH/MM/SS,只需使用最后三个变量,这是您当地时间的时间,但如果您想获得 UTC 时间,只需使用 getUTC 方法。这是代码。
2021-03-22 20:33:13
不需要月份名称列表,即使在 IE 中,javascript 也有。var 月份 = a.toLocaleDateString(undefined, {month: 'short'})
2021-03-23 20:33:13
错误:getMonth()返回 0 到 11 之间的月份数,因此a.getMonth() - 1是错误的。
2021-03-26 20:33:13

JavaScript 以毫秒为单位工作,因此您首先必须将 UNIX 时间戳从秒转换为毫秒。

var date = new Date(UNIX_Timestamp * 1000);
// Manipulate JavaScript Date object here...

用:

var s = new Date(1504095567183).toLocaleDateString("en-US")
console.log(s)
// expected output "8/30/2017"  

和时间:

var s = new Date(1504095567183).toLocaleTimeString("en-US")
console.log(s)
// expected output "3:19:27 PM"

Date.prototype.toLocaleDateString()

此外,toLocaleString包括日期和时间。
2021-03-13 20:33:13
这是获取日期 (M/D/YYYY) 的命令,而不是请求的时间 (HH/MM/SS)。
2021-03-18 20:33:13
请注意,数字“1504095567183”是 unix_timestamp * 1000
2021-04-04 20:33:13

现代解决方案(2020 年)

在新的世界里,我们应该转向标准的IntlJavaScript 对象,它有一个方便的DateTimeFormat构造函数和.format()方法:

function format_time(s) {
  const dtFormat = new Intl.DateTimeFormat('en-GB', {
    timeStyle: 'medium',
    timeZone: 'UTC'
  });
  
  return dtFormat.format(new Date(s * 1e3));
}

console.log( format_time(12345) );  // "03:25:45"


永恒的解决方案

但是为了与所有传统 JavaScript 引擎 100% 兼容,这里是最短的单行解决方案,将秒格式化为hh:mm:ss

function format_time(s) {
  return new Date(s * 1e3).toISOString().slice(-13, -5);
}

console.log( format_time(12345) );  // "03:25:45"

方法Date.prototype.toISOString()以简化的扩展ISO 8601格式返回时间,该格式始终为24 或 27 个字符长(即YYYY-MM-DDTHH:mm:ss.sssZ±YYYYYY-MM-DDTHH:mm:ss.sssZ)。时区始终为零 UTC 偏移量。

此解决方案不需要任何第三方库,并且在所有浏览器和 JavaScript 引擎中均受支持。

两者都不能使用来自的时间戳在 Safari iOS 13 中工作 navigator.geolocation
2021-03-12 20:33:13
我正在将您的功能粘贴到 Chrome 的控制台中:/ 即使在您的小提琴中,它也为我显示 01:02:00!在 Firefox 上试过,结果一样。很奇怪……我很确定这是因为我是 GMT+1 !
2021-03-13 20:33:13
我为您的答案提供了一个忽略任何时区的编辑,因此它始终会显示正确的格式值!
2021-03-13 20:33:13
@SteveChamaillard 谢谢你,史蒂夫。你是对的,toTimeString在时区上工作得不好。不幸的是,您的编辑在我看到之前就被拒绝了。但是,我建议改为使用toISOString,因为toGMTString已弃用并且可能在不同平台上返回不同的结果。
2021-03-30 20:33:13
ES6 更短: let time = s => new Date(s * 1e3).toISOString().slice(-13, -5)
2021-04-01 20:33:13