如何在Javascript中将Epoch格式的日期转换为"Y-m-d H:i:s"格式?

27
我该如何将以下日期转换为时间戳:

1293683278

并使用JavaScript将其转换为可读的日期:

2010-06-23 09:57:58

谢谢!

6个回答

46

var timestamp = 1293683278;
var date = new Date(timestamp * 1000);

var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();

console.log(year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds);

请参阅JavaScript Date文档以了解更多详细信息

另一种方法:

var timestamp = 1293683278;
var date = new Date(timestamp * 1000);
var iso = date.toISOString().match(/(\d{4}\-\d{2}\-\d{2})T(\d{2}:\d{2}:\d{2})/)

console.log(iso[1] + ' ' + iso[2]);


谢谢!奇怪的是,当我移除“*1000”时它就可以工作,但是否则它会给我一些随机数……? - James Cazzetta
JavaScript中的日期工作单位是微秒。您确定您的时间戳确切地有10个数字吗? - deadrunk
如何使用ISO字符串匹配获取类似于20130327的格式,日期为2013-03-27? - peter
尝试使用 iso[1].replace(/-/g, '') + ' ' + iso[2] - deadrunk
刚刚通过谷歌搜索路过,JavaScript 使用毫秒来工作 :) - K. Kilian Lindberg
你的第一个示例中,不要有额外的零(应该是7而不是07,如问题所需)。第二个示例转换为ISO格式,虽然问题中没有提到。这是最佳答案:https://dev59.com/aWkv5IYBdhLWcg3wiRMJ#50768368 - Nabi K.A.Z.

23
你可以使用moment.js来完成这个任务。
moment.unix(1293683278).format('YYYY-MM-DD HH:mm:ss');

moment.js的作者们发表声明:“我们希望不再鼓励在新项目中使用Moment.js。”(来源 - starball

3

代码:

var timestamp = 1293683278;
var d = new Date(timestamp * 1000);

console.log(
  d.getFullYear() + "-" +
  ("00" + (d.getMonth() + 1)).slice(-2) + "-" +
  ("00" + d.getDate()).slice(-2) + " " +
  ("00" + d.getHours()).slice(-2) + ":" +
  ("00" + d.getMinutes()).slice(-2) + ":" +
  ("00" + d.getSeconds()).slice(-2)
);

格式:YYYY-MM-DD HH:II:SS

结果:2010-12-30 07:57:58

演示:https://jsfiddle.net/NabiKAZ/9ycovfxt/

注意:如果要获取当前时间,只需使用:var d = new Date();


1
在决定在您的项目中使用Moment.js之前,请考虑使用其他替代方案。
Moment.js项目状态所述。

我们现在普遍认为Moment是一个维护模式下的遗留项目。它没有死亡,但确实已经完成了

此时,我建议使用date-fns库。它很轻量级、简单,并且支持国际化。
我真正喜欢的关于date-fns的是,你只需要声明你需要使用的模块。 以下是我的示例代码:
// Docs: https://date-fns.org/v2.23.0/docs/format
import format from 'date-fns/format'
import id from 'date-fns/locale/id'

function formatTimeLocale(time) {
  return format(
    new Date(time),
    `EEEE, d MMM yyyy 'pukul' HH:mm`,
    {
      locale: id,
    }
  )
}

// This will return: Rabu, 15 Sep 2021 pukul 16:21
const dateTime = formatTimeLocale(1631697689 * 1000)
console.log(dateTime)

0

我建议使用以下简短答案来表示全球UTC日期时间:

let timestamp = 1293683278, formattedDate;

// First way
formattedDate = new Date(timestamp * 1000).toJSON().split('.')[0].split('T').join(' ');
console.log(formattedDate);

// Second way
formattedDate = new Date(timestamp * 1000).toJSON().replace('T', ' ').slice(0, -5);
console.log(formattedDate);


1
时间戳在哪里? - Tikky
你可以使用 Date.now() - Jordy
它给出了错误的小时值。 - Parsa_Gholipour
1
小时值来自于UTC。我在我的Postman脚本中使用这个片段;工作得非常好 :) - Vaishak

-1

/* Get timestamp */
var timestamp = 1293683278;
document.querySelector("#timestamp").innerHTML = "Timestamp: " + timestamp;

/* Get milisecond from timestamp */
var milisecond = 1293683278 * 1000;    
document.querySelector("#milisecond").innerHTML = "Milisecond: " + milisecond;
  
/* Separate milisecond */
var datetime = new Date(milisecond);

var year    = datetime.getFullYear();
var month   = datetime.getMonth() + 1; // (0-11)
var date    = datetime.getDate();
var hour    = datetime.getHours();
var minute  = datetime.getMinutes();
var second  = datetime.getSeconds();

document.querySelector("#datetime").innerHTML = "Datetime: " + 
  year + "-" + addZero(month) + "-" + addZero(date) + " " + 
  addZero(hour) + ":" + addZero(minute) + ":" + addZero(second);      

// Add 0 if argument < 10
function addZero(i) {
  if (i < 10) {
    i = "0" + i
  };  
  return i;
}
<p id="timestamp"><p>
<p id="milisecond"><p>
<p id="datetime"><p>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接