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


82

如何将此时间戳转换13820863940002013-10-18 08:53:14在javascript中使用函数?目前,我具有此功能:

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

10
除了此处的所有答案外,目前js日期/时间处理中的事实上的标准是moment.js,没有人在这里提到它
alonisser

2
@alonisser-也许是因为将时间值转换为Date很简单。格式化也不是特别困难。
罗布

Answers:


128

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

var d = new Date(1382086394000);

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

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

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

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

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

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


也有togmtstring(),但已弃用。我不明白为什么在JS中有tolocalestring(),而一切在浏览器中都是本地的。还是toLocaleString与Nodejs分离?如果您使用服务器端JS,并且客户端与服务器之间的时区不同,您会获得客户端区域吗?
Timo

1
@timo-对于尝试显示与用户的格式设置首选项一致的格式的方法,“语言环境”的使用是不正确的。不幸的是,它基于语言,并不是首选格式的特别好的决定因素。最好根据系统偏好设置日期格式,而不是使用不太具体的语言代码。
RobG

32

这很好。在chrome浏览器中签入:

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

8
不建议使用toGMTString(),请改用toISOString()或toUTCString()
Nicolas Leucci '16

注意*-*:请勿乘以1000。否则,您将进入未来的空间!
vrintle

2
在将1586855504与1000相乘之后,我得到了正确的结果,否则它提供的是1970
Warewolf

乘以1000取决于您的时间戳记(秒或毫秒)
Tejashwi Kalp Taru

27

为什么不简单

new Date (timestamp);

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



13

以下是解决每种日期格式混乱的简单方法:

当前日期:

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,一半的代码无关紧要,但是我写了这个,以消除对日期形成的进一步怀疑。!!还有另一件事,我没有从任何地方复制它。我用自己的代码尝试过,两天前我就开始使用它
Trojan

1
是否按原样复制它都没有关系。关键是所有信息已经在另一个答案中了。顺便说一句,您的最后一个示例实际上并没有产生您声称的输出。
melpomene '16

显示的输出与代码输出实际上不匹配(
2016/10/2

9

我们需要使用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

3

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>


2

这就是我为instagram API做的事情。将日期乘以1000转换为带日期方法的时间戳,然后分别添加所有实体(如(年,月等)

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

convertStampDate(unixtimestamp){

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

// filtered fate
var convdataTime = month+' '+day;
return convdataTime;
}

带图章参数调用 convertStampDate('1382086394000')

就是这样。


1

我的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}`
}

-2

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

//从正常日期获取时间戳记日期:在格式- 15601.05亿

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

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

输出:1560018600000

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.