反转纪元时间转换

时间:2016-04-13 15:29:15

标签: javascript momentjs

我使用moment.js将长/纪元时间转换为人性化可读格式:

function convertValue(x) {

    var mytime = x; // x = 1460554200000000

    mytime = moment.utc(mytime).utcOffset(moment().format('ZZ'));
    mytime = mytime.format('DD-MM-YY HH:mm:ss.SSS');
    mytime = mytime + ' (' + moment().format('[UTC]ZZ') + ')';

    return myTime;

}

哪个myTime会返回如下内容:14-05-16 15:55:05.000(UTC + 100)

我怎么能做相反的事情,所以,如果我要收到类似的东西:29-01-16 14:35:05.000(UTC + 100)并转换回一个纪元时间?

1 个答案:

答案 0 :(得分:1)

对于给定的moment对象,如果您希望结果为字符串

  • 使用.format('x')作为时间戳(以毫秒为单位)
  • 使用.format('X')作为时间戳,以秒为单位

但是,如果您希望结果为数字

  • 使用.valueOf()作为时间戳(以毫秒为单位)
  • 使用.unix()作为时间戳,以秒为单位

但是,关于您提供的代码:

  • 偏移UTC+100是非标准的,有些含糊不清。它可以是UTC+10UTC+10:00UTC+0100UTC+01:00

  • DD-MM-YY可能会让用户感到困惑,因为它使用两位数年份,并且与通常预期的顺序相反。如果您打算让很多人使用YYYY-MM-DD,或者如果您想要某些特定于语言环境的内容,请使用/,请确保您使用的是常用的分隔符现场。通常为.var mytime = moment(x).format('YYYY-MM-DD HH:mm:ss.SSS [UTC]ZZ');

  • 您将使用当前偏移量给出的时间戳配对,而不是在给定时间生效的偏移量。在夏令时和其他时区变化的时区偏移发生变化的许多地方,这将会失败。

  • 您的代码应该是:

    var x = moment(mytime, 'YYYY-MM-DD HH:mm:ss.SSS [UTC]ZZ').valueOf();
    
  • 要以特定格式从字符串创建时刻对象,只需在解析时提供该格式。因此,反向功能将是:

     $query = $this->db->get_where('checklist_items', array('checklist_id' => $checklist_id, 'parent_id' => $parent_id));