在javascript中将时间戳转换为人类日期的函数

Posted

技术标签:

【中文标题】在javascript中将时间戳转换为人类日期的函数【英文标题】:Function to convert timestamp to human date in javascript [duplicate] 【发布时间】:2013-10-29 09:41:48 【问题描述】:

如何使用javascript中的函数将此时间戳1382086394000转换为2013-10-18 08:53:14?目前我有这个功能:

function cleanDate(d) return new Date(+d.replace(/\/Date\((\d+)\)\//, '$1'));

【问题讨论】:

除了这里的所有答案,目前 js 日期/时间处理的事实标准是 moment.js 很惊讶这里没有人提到它 @alonisser——也许是因为将时间值转换为日期是微不足道的。格式化也不是特别难。 【参考方案1】:

1382086394000 可能是一个时间值,即自 1970-01-01T00:00:00Z 以来的毫秒数。您可以使用它使用Date constructor 创建一个 ECMAScript Date 对象:

var d = new Date(1382086394000);

如何将其转换为可读的内容取决于您。简单地将其发送到输出应该调用内部 (并且完全依赖于实现) toString 方法*,该方法通常以人类可读的方式打印等效的 system 时间形式,例如

Fri Oct 18 2013 18:53:14 GMT+1000 (EST) 

在 ES5 中还有一些其他内置的格式化选项:

toDateString toTimeString toLocaleString

等等。请注意,大多数都依赖于实现,并且在不同的浏览器中会有所不同。如果您希望在所有浏览器中使用相同的格式,则需要自己格式化日期,例如:

alert(d.getDate() + '/' + (d.getMonth()+1) + '/' + d.getFullYear());

* Date.prototype.toString 的格式已在ECMAScript 2018 中标准化。它可能需要一段时间才能在所有实现中无处不在,但至少现在更常见的浏览器支持它。

【讨论】:

还有 togmtstring(),但已弃用。我不明白为什么在 JS 中有 tolocalestring(),一切都在浏览器中是本地的。还是 toLocaleString 与 Nodejs 分离?如果你用的是服务端JS,而且客户端和服务端的时区不同,你得到的是客户端时区吗? @timo — 使用“locale”是一种误称,因为该方法试图呈现与用户的格式偏好一致的格式。不幸的是,它基于语言,这不是首选格式的特别好的决定因素。最好根据日期格式的系统偏好设置日期格式,而不是不太具体的语言代码。 这对我有帮助,谢谢。要删除 GMT 使用 - .toDateString()【参考方案2】:

这很好用。签入chrome浏览器:

var theDate = new Date(timeStamp_value * 1000);
dateString = theDate.toGMTString();
alert(dateString );

【讨论】:

toGMTString() 已弃用,请改用 toISOString() 或 toUTCString() 注意 *-*:不要乘以 1000。否则,您将进入未来的太空! 在将 1586855504 与 1000 相乘后,我得到了正确的结果,否则它提供了 1970 乘以 1000 取决于时间戳的单位,秒或毫秒【参考方案3】:

为什么不简单

new Date (timestamp);

日期就是日期,格式是另一回事。

【讨论】:

【参考方案4】:

Moment.js 可以将 unix 时间戳转换为任何自定义格式

在这种情况下:var time = moment(1382086394000).format("DD-MM-YYYY h:mm:ss");

将打印18-10-2013 11:53:14

Here's a plunker 证明了这一点。

【讨论】:

听起来有点矫枉过正 谢谢。这对我很有帮助。【参考方案5】:

以下是各种日期格式混淆的简单方法:

当前日期:

var current_date=new Date();

获取当前日期的时间戳:

var timestamp=new Date().getTime();

将特定日期转换为时间戳:

var timestamp_formation=new Date('mm/dd/yyyy').getTime();

将时间戳转换为日期:

    var timestamp=new Date('02/10/2016').getTime();
    var todate=new Date(timestamp).getDate();
    var tomonth=new Date(timestamp).getMonth()+1;
    var toyear=new Date(timestamp).getFullYear();
    var original_date=tomonth+'/'+todate+'/'+toyear;

  OUTPUT:
 02/10/2016

【讨论】:

是的@melpomene,一半的代码是无关紧要的,但我写这个是为了消除对日期形成的进一步怀疑..!!!还有一件事我没有从任何地方复制它。我在我自己的代码中尝试过,两天前我开始研究它 你是否真的复制它并不重要。关键是所有信息都已经存在于另一个答案中。顺便说一句,您的最后一个示例实际上并没有产生您声称的输出。 显示的输出实际上与代码输出不匹配(2/10/2016)【参考方案6】:

我们需要使用 JavaScript 创建新函数。

function unixTime(unixtime) 

    var u = new Date(unixtime*1000);

      return u.getUTCFullYear() +
        '-' + ('0' + u.getUTCMonth()).slice(-2) +
        '-' + ('0' + u.getUTCDate()).slice(-2) + 
        ' ' + ('0' + u.getUTCHours()).slice(-2) +
        ':' + ('0' + u.getUTCMinutes()).slice(-2) +
        ':' + ('0' + u.getUTCSeconds()).slice(-2) +
        '.' + (u.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) 
    ;

console.log(unixTime(1370001284))

2016-04-30 08:36:26.000

【讨论】:

【参考方案7】:

formatDate 是您可以调用它并将您要格式化的日期传递给dd/mm/yyyy的函数

var unformatedDate = new Date("2017-08-10 18:30:00");
 
$("#hello").append(formatDate(unformatedDate));
function formatDate(nowDate) 
	return nowDate.getDate() +"/"+ (nowDate.getMonth() + 1) + '/'+ nowDate.getFullYear();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="hello">


</div>

【讨论】:

【参考方案8】:

我的 ES6 变体生成一个类似 2020-04-05_16:39:45.85725 的字符串。随意修改 return 语句以获得您需要的格式:

const getDateStringServ = timestamp => 

  const plus0 = num => `0$num.toString()`.slice(-2)

  const d = new Date(timestamp)

  const year = d.getFullYear()
  const monthTmp = d.getMonth() + 1
  const month = plus0(monthTmp)
  const date = plus0(d.getDate())
  const hour = plus0(d.getHours())
  const minute = plus0(d.getMinutes())
  const second = plus0(d.getSeconds())
  const rest = timestamp.toString().slice(-5)

  return `$year-$month-$date_$hour:$minute:$second.$rest`

【讨论】:

【参考方案9】:

这就是我为 Instagram API 所做的。用日期方法通过乘以 1000 转换时间戳。 然后单独添加所有实体,如(年、月等)

创建了自定义月份列表名称并使用返回月份索引的getMonth() 方法对其进行映射。

convertStampDate(unixtimestamp)


// Months array
var months_arr = ['January','February','March','April','May','June','July','August','September','October','November','December'];

// Convert timestamp to milliseconds
var date = new Date(unixtimestamp*1000);

// Year
var year = date.getFullYear();

// Month
var month = months_arr[date.getMonth()];

// Day
var day = date.getDate();

// Hours
var hours = date.getHours();

// Minutes
var minutes = "0" + date.getMinutes();

// Seconds
var seconds = "0" + date.getSeconds();

// Display date time in MM-dd-yyyy h:m:s format
var fulldate = month+' '+day+'-'+year+' '+hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);

// final date
var convdataTime = month+' '+day;
return convdataTime;

使用标记参数调用 convertStampDate('1382086394000')

就是这样。

【讨论】:

【参考方案10】:

有一种简单的方法可以转换成更易读的形式

new Date().toLocaleString();
new Date(1630734254000).toLocaleString();

这种格式的输出 => 2021 年 9 月 4 日,上午 11:14:14

【讨论】:

另外请确保时间戳有 13 位数字,您可能需要乘以 1000 以获得所需的输出【参考方案11】:
new Date(timestamp).toString().substring(4, 15)

1631685556789 ==&gt; Sep 15 2021

【讨论】:

【参考方案12】:

从给定日期计算时间戳中的日期

//从正常日期获取时间戳日期:格式 - 1560105000000

//输入日期的格式可以是:“2019-06-09T18:30:00.000Z”

this.calculateDateInTimestamp = function (inputDate) 
    var date = new Date(inputDate);
    return date.getTime();

输出:1560018600000

【讨论】:

以上是关于在javascript中将时间戳转换为人类日期的函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PySpark 中将 unix 时间戳列转换为人类可理解的时间戳? [复制]

在mysql中将纪元数转换为人类可读的日期

将纪元时间转换为人类日期时间字符串,无需夏令时转换

如何在 JavaScript 中将时间戳转换为 MySQL DateTime?

在javascript中将iso日期转换为毫秒

如何将时间戳转换为日期时间?