如何在javascript中解析yyyy-MM-dd HH:mm:ss.SSS格式的日期?

时间:2016-11-16 15:35:30

标签: javascript

const time = '2016-11-16 00:00:00.000';
const date = new Date(time);
console.info(date);

似乎safari无法解析yyyy-MM-dd HH:mm:ss.SSS格式日期(它返回NaN),而chrome工作正常,我该如何解析?

4 个答案:

答案 0 :(得分:2)

我会使用momentjs来处理javascript中的日期。简单的例子:

var time = '2016-11-16 00:00:00.000';
var m = moment.utc(time, "YYYY-MM-DD HH:mm:ss.SSS");
console.log(m)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.16.0/moment-with-locales.min.js"></script>

答案 1 :(得分:1)

尝试使用时刻js。 看看:moment.js parse with format 例如:

var mydate = moment("2016-11-16 00:00:00.000", "yyyy-MM-dd HH:mm:ss.SSS").toDate();

没有测试我放在那里的格式作为moment.js可能会使用不同的字符串来定义它但你可以在我上面写的doc链接中看到它

答案 2 :(得分:0)

如果Safari对DataTime格式很挑剔,你可以做一些简单的字符串替换&amp;串联。

const time = '2016-11-16 00:00:00.000';
const date = new Date(time.replace(' ','T') + 'Z');
console.info(date);

答案 3 :(得分:0)

这是一种不使用moment.js的解决方案(尽管它是一个不错的库,但目前大于4MB):

  formatDate: (value: Date) => {
    const day = value.getDate();
    const month = value.getMonth() + 1;
    const year = value.getFullYear();
    const hours = value.getHours();
    const minutes = value.getMinutes();
    const seconds = value.getSeconds();
    const milliseconds = value.getMilliseconds();

    return (
      String(day).padStart(2, '0') +
      '-' +
      String(month).padStart(2, '0') +
      '-' +
      year +
      ' ' +
      String(hours).padStart(2, '0') +
      ':' +
      String(minutes).padStart(2, '0') +
      ':' +
      String(seconds).padStart(2, '0') +
      '.' +
      String(milliseconds).padStart(3, '0')
    );
  },
};