为什么New Date()总是返回null?

时间:2017-01-11 05:14:04

标签: javascript angularjs date format

如果日期格式为$scope.timestamp = '2016-12-16 07:02:15 am'

我想格式化为16/12/2016 07:02:15 am

我已经尝试过以下代码并且它运行良好

$scope.originalStamp = $filter('date')
                          (new Date($scope.timestamp.replace("-","/")),'dd-MM-yyyy HH:mm:ss a');
  

但我的问题是为什么new Date($scope.timestamp)总是返回null如果不使用将( - )中的字符替换为(/)?

如果没有使用replace().

,请参阅以下代码无效
$scope.originalStamp = $filter('date')
                              (new Date($scope.timestamp),'dd-MM-yyyy HH:mm:ss a');
  

如果日期格式为( - ),new Date()为什么不接受?新的Date()转换是否取决于我的系统日期格式?

1 个答案:

答案 0 :(得分:6)

  

如果日期格式为( - )?

,为什么新的Date()不接受

解析ISO 8601 included in ECMA-262的有限子集以外的日期字符串取决于实现。您可能会得到正确的结果,错误的结果或无效的日期。因此,强烈建议不要使用 Date 构造函数或 Date.parse 来解析字符串(它们等同于解析),始终使用库或定制函数手动解析字符串

  

新的Date()转换是否取决于我的系统日期格式?

没有。约定支持许多格式(参见MDN Date),但是你不应该依赖它,因为有些格式在某些浏览器中被解析或解析不同,而在其他浏览器中则不然。

您可以尝试以下其中一个库:

  1. Moment.js:解析,格式化,算术,操作
  2. Fecha.js:只是解析和格式化
  3. PS

    如果你只想重新格式化2016-12-16 07:02:15 am' as' 16/12/2016 07:02:15 am',然后:

    
    
    // Reformat a date like '2016-12-16 07:02:15 am' as
    // '16/12/2016 07:02:15 am'
    function reformatDate(s) {
      var b = s.split(/[ -]/);
      return [b[2],b[1],b[0]].join('/') + ' ' + b[3] + ' ' + b[4];
    }
     
    var s = '2016-12-16 07:02:15 am';
    console.log(s + ' => ' + reformatDate(s))