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

我将时间作为Unix时间戳存储在MySQL数据库中,并将其发送到一些JavaScript代码。我如何从中获取时间?

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

2265649 次浏览

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 timestampvar hours = date.getHours();// Minutes part from the timestampvar minutes = "0" + date.getMinutes();// Seconds part from the timestampvar seconds = "0" + date.getSeconds();
// Will display time in 10:30:23 formatvar formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
console.log(formattedTime);

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

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

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

UNIX时间戳是自1970年1月1日00:00:00 UTC以来的号(根据维基百科)。

Javascript中Date对象的参数是自1970年1月1日00:00:00 UTC以来的毫秒号(根据JavaScript留档)。

例如,请参阅下面的代码:

    function tm(unix_tm) {var dt = new Date(unix_tm*1000);document.writeln(dt.getHours() + '/' + dt.getMinutes() + '/' + dt.getSeconds() + ' -- ' + dt + '<br>');
}
tm(60);tm(86400);

提供:

1/1/0 -- Thu Jan 01 1970 01:01:00 GMT+0100 (Central European Standard Time)1/0/0 -- Fri Jan 02 1970 01:00:00 GMT+0100 (Central European Standard Time)

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));

function timeConverter(UNIX_timestamp){var a = new Date(UNIX_timestamp*1000);var hour = a.getUTCHours();var min = a.getUTCMinutes();var sec = a.getUTCSeconds();var time = hour+':'+min+':'+sec ;return time;}

上述解决方案的问题是,如果小时、分钟或秒只有一个数字(即0-9),则时间将是错误的,例如可能是2:3:9,但应该是02:03:09。

根据此页面,使用Date的“toLocaleTimeString”方法似乎是一个更好的解决方案。

日期/纪元转换器

你需要ParseInt,否则它不起作用:


if (!window.a)window.a = new Date();
var mEpoch = parseInt(UNIX_timestamp);
if (mEpoch < 10000000000)mEpoch *= 1000;
------a.setTime(mEpoch);var year = a.getFullYear();...return time;

另一种方式-从ISO8601日期开始。

var timestamp = 1293683278;var date = new Date(timestamp * 1000);var iso = date.toISOString().match(/(\d{2}:\d{2}:\d{2})/)alert(iso[1]);

// Format value as two digits 0 => 00, 1 => 01function twoDigits(value) {if(value < 10) {return '0' + value;}return value;}
var date = new Date(unix_timestamp*1000);// display in format HH:MM:SSvar formattedTime = twoDigits(date.getHours())+ ':' + twoDigits(date.getMinutes())+ ':' + twoDigits(date.getSeconds());

我偏爱Jacob Wright的#0库,它以PHP#1函数的风格实现了JavaScript日期格式。

new Date(unix_timestamp * 1000).format('h:i:s')

我会考虑使用像momentjs.com这样的库,这使得它非常简单:

基于Unix时间戳:

var timestamp = moment.unix(1293683278);console.log( timestamp.format("HH/mm/ss") );

基于MySQL日期字符串:

var now = moment("2010-10-10 12:03:15");console.log( now.format("HH/mm/ss") );

如果您想将Unix时间持续时间转换为实际的小时、分钟和秒,您可以使用以下代码:

var hours = Math.floor(timestamp / 60 / 60);var minutes = Math.floor((timestamp - hours * 60 * 60) / 60);var seconds = Math.floor(timestamp - hours * 60 * 60 - minutes * 60 );var duration = hours + ':' + minutes + ':' + seconds;

不需要40 KB库的现代解决方案:

日期时间戳是格式化日期/时间的非文化帝国主义方式。

// Setup oncevar options = {//weekday: 'long',//month: 'short',//year: 'numeric',//day: 'numeric',hour: 'numeric',minute: 'numeric',second: 'numeric'},intlDate = new Intl.DateTimeFormat( undefined, options );
// Reusable formattervar timeStamp = 1412743273;console.log( intlDate.format( new Date( 1000 * timeStamp ) ) );
function getDateTime(unixTimeStamp) {
var d = new Date(unixTimeStamp);var h = (d.getHours().toString().length == 1) ? ('0' + d.getHours()) : d.getHours();var m = (d.getMinutes().toString().length == 1) ? ('0' + d.getMinutes()) : d.getMinutes();var s = (d.getSeconds().toString().length == 1) ? ('0' + d.getSeconds()) : d.getSeconds();
var time = h + '/' + m + '/' + s;
return time;}
var myTime = getDateTime(1435986900000);console.log(myTime); // output 01/15/00

使用Moment.js,您可以像这样获取时间和日期:

var dateTimeString = moment(1439198499).format("DD-MM-YYYY HH:mm:ss");

你只能用这个来获得时间:

var timeString = moment(1439198499).format("HH:mm:ss");

注意一些答案的零问题。例如,时间戳1439329773会被错误地转换为12/08/2015 0:49

我建议使用以下方法来克服这个问题:

var timestamp = 1439329773; // replace your timestampvar date = new Date(timestamp * 1000);var formattedDate = ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear() + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2);console.log(formattedDate);

现在的结果是:

12/08/2015 00:49
function getTIMESTAMP() {var date = new Date();var year = date.getFullYear();var month = ("0" + (date.getMonth() + 1)).substr(-2);var day = ("0" + date.getDate()).substr(-2);var hour = ("0" + date.getHours()).substr(-2);var minutes = ("0" + date.getMinutes()).substr(-2);var seconds = ("0" + date.getSeconds()).substr(-2);
return year + "-" + month + "-" + day + " " + hour + ":" + minutes + ":" + seconds;}
//2016-01-14 02:40:01

现代解决方案(2020年)

在新的世界中,我们应该转向标准的#0 JavaScript对象,它有一个方便的#1构造函数和#2方法:

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"

方法#0返回时间简化扩展ISO 8601格式,长度为总是 24或27个字符(即YYYY-MM-DDTHH:mm:ss.sssZ±YYYYYY-MM-DDTHH:mm:ss.sssZ)。时区总是UTC偏移为零。

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

在这一刻,你必须使用unix时间戳:

const dateTimeString = moment.unix(1466760005).format("DD-MM-YYYY HH:mm:ss");

根据@shomrat的回答,这里有一个片段,它会像这样自动写入datetime(有点类似于StackOverflow的答案日期:answered Nov 6 '16 at 11:51):

today, 11:23

yersterday, 11:23

或者(如果不同但与今天相同)

6 Nov, 11:23

或者(如果比今天多一年)

6 Nov 2016, 11:23

function timeConverter(t) {var a = new Date(t * 1000);var today = new Date();var yesterday = new Date(Date.now() - 86400000);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();if (a.setHours(0,0,0,0) == today.setHours(0,0,0,0))return 'today, ' + hour + ':' + min;else if (a.setHours(0,0,0,0) == yesterday.setHours(0,0,0,0))return 'yesterday, ' + hour + ':' + min;else if (year == today.getFullYear())return date + ' ' + month + ', ' + hour + ':' + min;elsereturn date + ' ' + month + ' ' + year + ', ' + hour + ':' + min;}

您可以使用以下函数将时间戳转换为HH:MM:SS格式:

var convertTime = function(timestamp, separator) {var pad = function(input) {return input < 10 ? "0" + input : input;};var date = timestamp ? new Date(timestamp * 1000) : new Date();return [pad(date.getHours()),pad(date.getMinutes()),pad(date.getSeconds())].join(typeof separator !== 'undefined' ?  separator : ':' );}

不传递分隔符,它使用:作为(默认)分隔符:

time = convertTime(1061351153); // --> OUTPUT = 05:45:53

如果你想使用/作为分隔符,只需将其作为第二个参数传递:

time = convertTime(920535115, '/'); // --> OUTPUT = 09/11/55

Demo

var convertTime = function(timestamp, separator) {var pad = function(input) {return input < 10 ? "0" + input : input;};var date = timestamp ? new Date(timestamp * 1000) : new Date();return [pad(date.getHours()),pad(date.getMinutes()),pad(date.getSeconds())].join(typeof separator !== 'undefined' ?  separator : ':' );}
document.body.innerHTML = '<pre>' + JSON.stringify({920535115 : convertTime(920535115, '/'),1061351153 : convertTime(1061351153, ':'),1435651350 : convertTime(1435651350, '-'),1487938926 : convertTime(1487938926),1555135551 : convertTime(1555135551, '.')}, null, '\t') +  '</pre>';

另见这个小提琴

function getDateTimeFromTimestamp(unixTimeStamp) {let date = new Date(unixTimeStamp);return ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear() + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2);}
const myTime = getDateTimeFromTimestamp(1435986900000);console.log(myTime); // output 01/05/2000 11:00

用途:

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()

这适用于PHP时间戳

var d = 1541415288860;//var d =val.timestamp;
//NB: use + before variable namevar date = new Date(+d);
console.log(d);console.log(date.toDateString());console.log(date.getFullYear());console.log(date.getMinutes());console.log(date.getSeconds());console.log(date.getHours());console.log(date.toLocaleTimeString());

var d =val.timestamp;var date=new Date(+d); //NB: use + before variable name
console.log(d);console.log(date.toDateString());console.log(date.getFullYear());console.log(date.getMinutes());console.log(date.getSeconds());console.log(date.getHours());console.log(date.toLocaleTimeString());

上述方法将生成此结果

1541415288860Mon Nov 05 201820185448131:54:48 PM

有很多方法可以完美地与时间戳一起工作。不能全部列出

下面的代码还提供了3位毫秒,非常适合控制台日志前缀:

const timeStrGet = date => {const milliSecsStr = date.getMilliseconds().toString().padStart(3, '0') ;return `${date.toLocaleTimeString('it-US')}.${milliSecsStr}`;};
setInterval(() => console.log(timeStrGet(new Date())), 299);

格式秒为hh: mm: ss: Variant的最短单行解决方案:

console.log(new Date(1549312452 * 1000).toISOString().slice(0, 19).replace('T', ' '));// "2019-02-04 20:34:12"

moment.js

将时间戳转换为js中的日期字符串

https://momentjs.com/

moment().format('YYYY-MM-DD hh:mm:ss');// "2020-01-10 11:55:43"
moment(1578478211000).format('YYYY-MM-DD hh:mm:ss');// "2020-01-08 06:10:11"

@阿隆给出的答案有效,但对我不起作用,因为我从1980年开始尝试转换时间戳。所以我做了一些更改,如下所示

function ConvertUnixTimeToDateForLeap(UNIX_Timestamp) {var dateObj = new Date(1980, 0, 1, 0, 0, 0, 0);dateObj.setSeconds(dateObj.getSeconds() + UNIX_Timestamp);return dateObj;}
document.body.innerHTML = 'TimeStamp : ' + ConvertUnixTimeToDateForLeap(1269700200);

所以如果你有一个从另一个十年左右开始的时间戳,就用这个。它为我节省了很多头痛。

最短

(new Date(ts*1000)+'').slice(16,24)

let ts = 1549312452;let time = (new Date(ts*1000)+'').slice(16,24);
console.log(time);

如果Timestamp是数字整数字符串,则必须首先将其转换为整数:

<!DOCTYPE html>
<input type="text" id="Date_Timestamp" size="50" oninput='document.getElementById("Date_Timestamp_Conversion").innerText =new Date(this.value) + " _ (Converted to Local Time) \n" +new Date(this.value).toString() + " _ (Converted to Local Time) \n" +new Date(this.value).toUTCString() + " _ (Converted to Universal Time, UTC, GMT, GMT+0, GMT-0) \n" +Date.parse(this.value) + " _ (Timestamp _ The Date is first converted to Universal Time, then converted to Timestamp)\n" +( isNaN(this.value) ? "Not a Number _ (Timestamp to Local Time)" : new Date(parseInt(this.value)) + " _ (Converted to Local Time)" ) + "\n" +( isNaN(this.value) ? "Not a Number _ (Timestamp to Universal Time)" : new Date(parseInt(this.value)).toUTCString() + " _ (Converted to Universal Time)" ) + "\n" +"";'><br><span id="Date_Timestamp_Conversion">(Type\Paste a "Date" or "Timestamp" in the input box above!)<br></span><br>2021/03/19 = March 19 2021 _ ("Year/Month/Day" _ Supported)<br>03/19/2021 = March 19 2021 _ ("Month/Day/Year" _ Supported)<br>19/03/2021 = Invalid Date _ ("Day/Month/Year" _ Not Supported)<br><br>
<script>
d = new Date();document.getElementById("Date_Timestamp").value =d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate() + ", " + d.toLocaleTimeString([], {hour12:false, timeZoneName:"short"});
</script>

试试这个:

      new Date(1638525320* 1e3).toISOString()  //2021-12-03T09:55:20.000Z

有多种方法可以将unix时间戳转换为时间(HH/MM/SS)

  1. 使用new Date()-这是在JavaScript中内置的
  2. 矩包-这是一个著名的节点模块,但这将被弃用。
  3. Dayjs包-这是最新且快速增长的节点模块之一

使用new Date()

const dateTimeStr = new Date(1504052527183).toLocaleString()const result = (dateTimeStr.split(", ")[1]).split(":").join("/")console.log(result)

利用瞬间

const moment = require('moment')const timestampObj = moment.unix(1504052527183);const result = timestampObj.format("HH/mm/ss")console.log(result);

使用day.js

const dayjs = require('dayjs')const result = dayjs(1504052527183).format("HH/mm/ss")console.log(result);

您可以使用在线时间转换工具检查时间戳到时间转换

您可以使用格式(来源):

const date = new Date(yourTimestamp).toLocaleDateString('de-DE', {weekday: 'long',day: '2-digit',month: 'long',year: 'numeric'})

结果:

Sonntag, 01. Januar 2023

我也在寻找一个简单的解决方案来解决这个问题。这就是我创建这个函数的原因。

您可以轻松扩展功能。此函数具有我需要的所有选项。它基本上与php date函数相同。

function date_format(unix_timestamp,format){const date=new Date(unix_timestamp*1000);const dateObject={'Y' : date.getFullYear(),'m' : String(date.getMonth()).padStart(2,'0'),'d' : String(date.getDate()).padStart(2,'0'),'H' : String(date.getHours()).padStart(2,'0'),'i' : String(date.getMinutes()).padStart(2,'0'),'s' : String(date.getSeconds()).padStart(2,'0'),};var dateString='';for (let char of format) {if(char in dateObject){dateString+=dateObject[char];}else{dateString+=char;}}return dateString;}
console.log(date_format(1667127654,'H/i/s')); // 12/00/54console.log(date_format(1667127654,'Y-m-d H:i:s')); // 2022-10-30 12:00:54console.log(date_format(1667127654,'d.m.Y')); // 30.10.2022console.log(date_format(1667127654,'H:i:s')); // 12:00:54