【问题标题】:extract time from timestamp in js从js中的时间戳中提取时间
【发布时间】:2016-12-02 08:41:25
【问题描述】:

我有纪元时间戳值,我想从中提取时间。 例如:输入1480687432 i.e.(Fri Dec 02 2016 14:03:52 GMT+0530 (IST)) 输出14:03:52,我想将它与日落/日出时间(也用于未来的惊喜/日落时间)进行比较,以确定是白天还是黑夜。我正在使用以下方法,任何人都可以在javascriptmoment.js 中提出比这更好的方法

var input = 1480687432; //  i.e.(Fri Dec 02 2016 14:03:52 GMT+0530 (IST))` 
// output 14:03:52

function getTimeFromDate(timestamp) {
  var date = new Date(timestamp * 1000);
  var hours = date.getHours();
  var minutes = date.getMinutes();
  var seconds = date.getSeconds();

  var time = new Date();
  return time.setHours(hours, minutes, seconds);
}
console.log(getTimeFromDate(1480687432))

【问题讨论】:

  • 使用 moment 你可以这样做:moment(timestamp * 1000).format('HH:mm:ss') 如果你想将时间部分作为字符串。
  • 您转换为日期似乎返回了错误的值。如果 1480687432 是 ECMAScript 纪元以来的秒数,那么它代表 2016-12-02T19:33:52.000+0530。您的时间似乎是 UTC,而不是 IST。
  • @VincenzoC moment(timestamp * 1000).format('HH:mm:ss') 这将以字符串格式返回时间,这将再次引发与字符串比较两次的问题。我通过创建时间对象立即发现了这一点。 moment(moment.unix(epochtimestamp).format("HH:mm:ss"), "HH:mm:ss");
  • moment().isBefore()moment().isAfter() 可以用来比较

标签: javascript date momentjs


【解决方案1】:

Javascript 有一个内置函数。您可以根据需要使用以下任何一种。

var timestamp = 1480687432 * 1000;
console.log(new Date(timestamp).toTimeString());
console.log(new Date(timestamp).toLocaleTimeString());

【讨论】:

    【解决方案2】:

    现在您的函数也返回一个时间戳,但它会将日期修改为相对于今天

    如果你不想这样,你可以这样做

    const getTimeFromDate1 = timestamp => new Date(timestamp*1000).getTime(); 
    

    const getTimeFromDate1 = timestamp => new Date(timestamp * 1000).getTime();
    
    
    var input = 1480687432; //  i.e.(Fri Dec 02 2016 14:03:52 GMT+0530 (IST))` 
    // output 14:03:52
    
    function getTimeFromDate2(timestamp) { // original code
      var date = new Date(timestamp * 1000);
      var hours = date.getHours();
      var minutes = date.getMinutes();
      var seconds = date.getSeconds();
    
      var time = new Date();
      return time.setHours(hours, minutes, seconds);
    }
    
    // my code
    
    console.log(new Date(getTimeFromDate1(1480687432))) // works as expected
    
    // Your code
    
    console.log(new Date(getTimeFromDate2(1480687432))) // does not return the original date

    也许你的意思是这个(在我的时区返回 15:03:52)

    const pad = num => ("0" + num).slice(-2);
    
    const getTimeFromDate = timestamp => {
      const date = new Date(timestamp * 1000);
      let hours = date.getHours(),
        minutes = date.getMinutes(),
        seconds = date.getSeconds();
      return pad(hours) + ":" + pad(minutes) + ":" + pad(seconds)
    }
    //  Fri Dec 02 2016 14:03:52 GMT+0530 (IST)
    console.log(getTimeFromDate(1480687432))

    【讨论】:

    • @RobG 你不能对 "0"+num 进行切片,除非它被包装或在一个 var 中。更新为 () 而不是 String()
    猜你喜欢
    • 2015-01-10
    • 2016-08-10
    • 2018-04-17
    • 1970-01-01
    • 2018-07-18
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多