【问题标题】:Timestamp to human readable format人类可读格式的时间戳
【发布时间】:2011-07-21 23:25:00
【问题描述】:

我在使用 javascript 从 unix 时间戳转换为人类表示时遇到了一个奇怪的问题

这是时间戳

1301090400

这是我的javascript

var date = new Date(timestamp * 1000);
var year    = date.getFullYear();
var month   = date.getMonth();
var day     = date.getDay();
var hour    = date.getHours();
var minute  = date.getMinutes();
var seconds = date.getSeconds();  

我预计结果是 2011 2, 25 22 00 00。但它是 2011, 2, 6, 0, 0, 0 我想念什么?

【问题讨论】:

标签: javascript timestamp


【解决方案1】:

getDay() 返回星期几。要获取日期,请使用date.getDate()getMonth() 检索月份,但月份是从零开始的,因此使用 getMonth()+1 应该会给您正确的月份。这里的时间值似乎没问题,尽管这里的时间是 23 (GMT+1)。如果您想要通用值,请将UTC 添加到方法中(例如date.getUTCFullYear()date.getUTCHours()

var timestamp = 1301090400,
date = new Date(timestamp * 1000),
datevalues = [
   date.getFullYear(),
   date.getMonth()+1,
   date.getDate(),
   date.getHours(),
   date.getMinutes(),
   date.getSeconds(),
];
alert(datevalues); //=> [2011, 3, 25, 23, 0, 0]

【讨论】:

  • 您对日期的建议帮助,但我仍然无法弄清楚小时、分钟和秒有什么问题
  • @george 你不会错过任何东西。这些值是整数,所以不能有像“00”这样的值。您可以自己轻松附加它,例如 minute = (minute < 10 ? "0" : "") + minute;
  • @georgevich:你在哪个时区?如果你使用date.getUTCHours()会发生什么?
  • GMT + 2 date.getUTCHours() 的结果是 19
  • GMT+2,所以 22h 通用时间 = 0h 你的时间。这是一个使用 UTC 值的 jsfiddle:jsfiddle.net/EZFG9.
【解决方案2】:
var newDate = new Date();
newDate.setTime(unixtime*1000);
dateString = newDate.toUTCString();

unixtime 是您的 sql 数据库返回的时间。如果有帮助,这里是fiddle

例如,用于当前时间:

document.write( new Date().toUTCString() );

【讨论】:

【解决方案3】:

这是 kooilnc 的答案,带 0 填充

function getFormattedDate() {
    var date = new Date();

    var month = date.getMonth() + 1;
    var day = date.getDate();
    var hour = date.getHours();
    var min = date.getMinutes();
    var sec = date.getSeconds();

    month = (month < 10 ? "0" : "") + month;
    day = (day < 10 ? "0" : "") + day;
    hour = (hour < 10 ? "0" : "") + hour;
    min = (min < 10 ? "0" : "") + min;
    sec = (sec < 10 ? "0" : "") + sec;

    var str = date.getFullYear() + "-" + month + "-" + day + "_" +  hour + ":" + min + ":" + sec;

    /*alert(str);*/

    return str;
}

【讨论】:

    【解决方案4】:

    使用Date.prototype.toLocaleTimeString() 记录的here

    请注意网址中的语言环境示例 en-US。

    【讨论】:

      【解决方案5】:

      小时、分钟和秒取决于您操作系统的时区。在 GMT (UST) 中是 22:00:00,但在不同的时区中可以是任何值。因此,将时区偏移量添加到时间以创建 GMT 日期:

      var d = new Date();
      date = new Date(timestamp*1000 + d.getTimezoneOffset() * 60000)
      

      【讨论】:

      • 为什么时间戳乘以 1000?
      • @BrunoGomes 他假设时间戳以秒为单位,而 javascript 以毫秒为单位。
      【解决方案6】:

      我正在寻找一种非常具体的解决方案,将当前时间作为保证长度字符串返回到每个日志行的开头。如果其他人正在寻找相同的东西,它们就在这里。

      基本时间戳

      "2021-05-26 06:46:33"

      以下函数返回当前时间的零填充时间戳(总是 19 个字符长)

      function getTimestamp () {
        const pad = (n,s=2) => (`${new Array(s).fill(0)}${n}`).slice(-s);
        const d = new Date();
        
        return `${pad(d.getFullYear(),4)}-${pad(d.getMonth()+1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
      }
      

      完整时间戳

      "2021-06-02 07:08:19.041"

      以下函数返回当前时间的零填充时间戳,包括毫秒(总是 23 个字符长)

      function getFullTimestamp () {
        const pad = (n,s=2) => (`${new Array(s).fill(0)}${n}`).slice(-s);
        const d = new Date();
        
        return `${pad(d.getFullYear(),4)}-${pad(d.getMonth()+1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}.${pad(d.getMilliseconds(),3)}`;
      }
      

      【讨论】:

        猜你喜欢
        • 2016-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-26
        相关资源
        最近更新 更多