2016-09-14 47 views
1

考虑以下时间戳我回来从服务器:格式化从时间戳的日期没有BST在JavaScript

2016-09-15T18:15:00.0000000 

如果我做了以下内容:

function friendlyTime(timeslot) { 
    const time = timeslot, 
    timeDate = new Date(time), 
    timeHours = `0${timeDate.getHours().toString()}`.slice(-2), 
    timeMinutes = `0${timeDate.getMinutes().toString()}`.slice(-2); 

    return `${timeHours}:${timeMinutes}`; 
} 

const slot = friendlyTime('2016-09-15T18:15:00.0000000'); 

我回去:

19:15,当我真正想要的是没有BST,如18:15时间戳的反映。

有没有简单的方法来做到这一点?当涉及JavaScript中的日期和时区时,我的头会爆炸。

无论世界上任何人在哪里,它都需要看起来一样。它不应该反映任何人的个人时间设置。

+0

刺痛不具有相关联的时区,从而应被解析为本地和应代表在每一个时间带18:15(并因此将表示每个时间在一个不同的时间具有不同偏移量的区域)。通过使用UTC方法,您可以获得等效的UTC时间,这也是每个时区中具有不同偏移量的不同时间。每个Xotic750的答案只需操纵字符串。 – RobG

回答

4

只需操作字符串,将支持4 to 6 digit common spec years(或更多)的一种可能性。

function friendlyTime(timeslot) { 
 
    return timeslot.split('T').pop().split(':', 2).join(':'); 
 
} 
 
console.log(friendlyTime('2016-09-15T18:15:00.0000000'));

另外,如果你只需要支持4位数字的年份。 (Javascript is spec'd for 4)

function friendlyTime(timeslot) { 
 
    return timeslot.slice(11, 16); 
 
} 
 
console.log(friendlyTime('2016-09-15T18:15:00.0000000'));

+1

是的,字符串操作就是这样。许多方法可以使猫变皮,例如'('2016-09-15T18:15:00.0000000'.match(/ \ d \ d:\ d \ d /)|| [])[0]'。;-) – RobG

+0

这样可以避免任何潜在的时区问题,所以我接受了这个答案,即使字符串操作在从时间戳中提取时间方面感觉有点奇怪。完美的作品! –

2

而不是getHours()getMinutes()使用getUTCHours()getUTCMinutes()。另外,正如Mike McCaughan在评论中指出的那样,您必须在字符串的末尾添加Z以确保它能在所有浏览器中正确解析。

function friendlyTime(timeslot) { 
 
    const time = timeslot, 
 
    timeDate = new Date(time), 
 
    timeHours = `0${timeDate.getUTCHours().toString()}`.slice(-2), 
 
    timeMinutes = `0${timeDate.getUTCMinutes().toString()}`.slice(-2); 
 

 
    return `${timeHours}:${timeMinutes}`; 
 
} 
 

 
const slot = friendlyTime('2016-09-15T18:15:00.0000000Z'); 
 
console.log(slot);

+0

我之前尝试过,但是如果我的时区是澳大利亚,它会影响结果。 –

+0

@MichaelGiovanniPumo无论你的时区是什么,它都会显示“18:15”。 –

+2

@Gothdo,如果没有“Z”,是不是依赖于浏览器? –

相关问题