JavaScript unixtime问题

JavaScript unixtime问题,javascript,unix-timestamp,Javascript,Unix Timestamp,我以Unix格式从数据库中获取时间 它看起来是这样的:console.log(time); 结果:1300709088000 现在我想重新格式化它,只选择时间,我发现: 这并没有像我想的那样奏效。我得到的时间是: 1300709088000 9:0:0 1300709252000 6:33:20 1300709316000 0:20:0 1300709358000 12:0:0 1300709530000 11:46:40 当我知道时代不同时,这是非常错误的时代。我怎样才能修好它

我以Unix格式从数据库中获取时间

它看起来是这样的:console.log(time); 结果:1300709088000

现在我想重新格式化它,只选择时间,我发现:

这并没有像我想的那样奏效。我得到的时间是:

1300709088000
9:0:0

1300709252000
6:33:20

1300709316000
0:20:0

1300709358000
12:0:0

1300709530000
11:46:40
当我知道时代不同时,这是非常错误的时代。我怎样才能修好它

    console.log(time);

var date = new Date(time*1000);
// hours part from the timestamp
var hours = date.getHours();
// minutes part from the timestamp
var minutes = date.getMinutes();
// seconds part from the timestamp
var seconds = date.getSeconds();

// will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes + ':' + seconds;
console.log(formattedTime);

您的时间戳不是Unix格式的,而是Javascript毫秒分辨率格式的


因此,在创建
日期
对象时,不应该乘以1000。

您的时间戳不是Unix格式的,而是Javascript毫秒分辨率格式的

因此,在创建
Date
对象时,不应该乘以1000

它看起来是这样的:console.log(time);结果:1300709088000

这看起来不像是Unix时间戳(从纪元开始的秒数),而是从纪元开始的毫秒数。因此,对于JavaScript,从秒到毫秒的转换不需要乘以1000,它已经是以毫秒为单位的了(或者说,您要处理的是从现在起超过41000年的日期;这很公平)

测试:

var时间=[
1300709088000,
1300709252000,
1300709316000,
1300709358000,
1300709530000
];
var指数;
对于(索引=0;索引<乘以长度;++索引){
显示(次数[索引]+“=>”+新日期(次数[索引]);
}


更新:或获取单个零件:

var times = [
    1300709088000,
    1300709252000,
    1300709316000,
    1300709358000,
    1300709530000
  ];
var index, dt;

for (index = 0; index < times.length; ++index) {
    dt = new Date(times[index]);
    display(times[index] +
            " => " +
            dt +
            " (" + formatISOLikeDate(dt) + ")");
}

// Not all implementations have ISO-8601 stuff yet, do it manually
function formatISOLikeDate(dt) {
    var day    = String(dt.getDate()),
        month  = String(dt.getMonth() + 1), // Starts at 0
        year   = String(dt.getFullYear()),
        hour   = String(dt.getHours()),
        minute = String(dt.getMinutes()),
        second = String(dt.getSeconds());

    return zeroPad(year, 4) + "-" +
           zeroPad(month, 2) + "-" +
           zeroPad(day, 2) + " " +
           zeroPad(hour, 2) + ":" +
           zeroPad(minute, 2) + ":" +
           zeroPad(second, 2);
}
function zeroPad(str, width) {
    while (str.length < width) {
        str = "0" + str;
    }
    return str;
}
var时间=[
1300709088000,
1300709252000,
1300709316000,
1300709358000,
1300709530000
];
var指数,dt;
对于(索引=0;索引<乘以长度;++索引){
dt=新日期(次数[索引]);
显示(次数[索引]+
" => " +
dt+
(“+甲酸异柠檬酸盐(dt)+”);
}
//并不是所有的实现都有ISO-8601的东西,请手动执行
函数formatISOLikeDate(dt){
var day=String(dt.getDate()),
month=String(dt.getMonth()+1),//从0开始
年份=字符串(dt.getFullYear()),
小时=字符串(dt.getHours()),
分钟=字符串(dt.getMinutes()),
second=字符串(dt.getSeconds());
返回zeroPad(第4年)+“-”+
zeroPad(月,2)+“-”+
zeroPad(第2天)+“+
零键盘(小时,2)+“+
零键盘(分钟,2)+“+
零键盘(第二,2);
}
功能零键盘(str,宽度){
while(str.长度<宽度){
str=“0”+str;
}
返回str;
}
…但如果你打算在约会方面做很多事情,我会看看

它看起来是这样的:console.log(time);结果:1300709088000

这看起来不像是Unix时间戳(从纪元开始的秒数),而是从纪元开始的毫秒数。因此,对于JavaScript,从秒到毫秒的转换不需要乘以1000,它已经是以毫秒为单位的了(或者说,您要处理的是从现在起超过41000年的日期;这很公平)

测试:

var时间=[
1300709088000,
1300709252000,
1300709316000,
1300709358000,
1300709530000
];
var指数;
对于(索引=0;索引<乘以长度;++索引){
显示(次数[索引]+“=>”+新日期(次数[索引]);
}


更新:或获取单个零件:

var times = [
    1300709088000,
    1300709252000,
    1300709316000,
    1300709358000,
    1300709530000
  ];
var index, dt;

for (index = 0; index < times.length; ++index) {
    dt = new Date(times[index]);
    display(times[index] +
            " => " +
            dt +
            " (" + formatISOLikeDate(dt) + ")");
}

// Not all implementations have ISO-8601 stuff yet, do it manually
function formatISOLikeDate(dt) {
    var day    = String(dt.getDate()),
        month  = String(dt.getMonth() + 1), // Starts at 0
        year   = String(dt.getFullYear()),
        hour   = String(dt.getHours()),
        minute = String(dt.getMinutes()),
        second = String(dt.getSeconds());

    return zeroPad(year, 4) + "-" +
           zeroPad(month, 2) + "-" +
           zeroPad(day, 2) + " " +
           zeroPad(hour, 2) + ":" +
           zeroPad(minute, 2) + ":" +
           zeroPad(second, 2);
}
function zeroPad(str, width) {
    while (str.length < width) {
        str = "0" + str;
    }
    return str;
}
var时间=[
1300709088000,
1300709252000,
1300709316000,
1300709358000,
1300709530000
];
var指数,dt;
对于(索引=0;索引<乘以长度;++索引){
dt=新日期(次数[索引]);
显示(次数[索引]+
" => " +
dt+
(“+甲酸异柠檬酸盐(dt)+”);
}
//并不是所有的实现都有ISO-8601的东西,请手动执行
函数formatISOLikeDate(dt){
var day=String(dt.getDate()),
month=String(dt.getMonth()+1),//从0开始
年份=字符串(dt.getFullYear()),
小时=字符串(dt.getHours()),
分钟=字符串(dt.getMinutes()),
second=字符串(dt.getSeconds());
返回zeroPad(第4年)+“-”+
zeroPad(月,2)+“-”+
zeroPad(第2天)+“+
零键盘(小时,2)+“+
零键盘(分钟,2)+“+
零键盘(第二,2);
}
功能零键盘(str,宽度){
while(str.长度<宽度){
str=“0”+str;
}
返回str;
}

…但如果你打算在约会方面做很多事情,我会看看。

我试过做这样的事情:

console.log(时间)

结果是: 1300709088000
楠:楠:楠

我试过这样做:

console.log(时间)

结果是: 1300709088000
NaN:NaN:NaN

我尝试过这样做:console.log(time);其中日期=新日期(时间);//时间戳中的小时数为hours=date.getHours();//从时间戳开始的聚会分钟数每分钟=date.getMinutes();//时间戳中的秒方,其中秒=date.getSeconds();//将显示时间设置为10:30:23格式时间=小时+':'+分钟+':'+秒;console.log(格式化时间);结果是:1300709088000nan:NaN:NaNI尝试过这样做:console.log(time);其中日期=新日期(时间);//时间戳中的小时数为hours=date.getHours();//从时间戳开始的聚会分钟数每分钟=date.getMinutes();//时间戳中的秒方,其中秒=date.getSeconds();//将显示时间设置为10:30:23格式时间=小时+':'+分钟+':'+秒;console.log(格式化时间);结果是:1300709088000NaN:NaN:NaN为什么这是作为答案发布的?去掉“where”、“was”和“every”并替换为“var”,它可能会起作用……为什么这是作为answ发布的
 where date = new Date (time);
 / / hours party from the timestamp
 was hours = date.getHours ();
 / / party minutes from the timestamp
 Every minute = date.getMinutes ();
 / / Seconds Party From The timestamp
 where seconds = date.getSeconds ();

 / / Will display time up 10:30:23 format
 was formattedTime = hours + ':' + minutes + ':' + seconds;
 console.log (formattedTime);