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

Ram*_*ran 4 javascript format date angularjs

如果是日期格式 $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');
Run Code Online (Sandbox Code Playgroud)

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

如果没有使用,请参阅以下代码无效 replace().

$scope.originalStamp = $filter('date')
                              (new Date($scope.timestamp),'dd-MM-yyyy HH:mm:ss a');
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*obG 6

如果日期格式为( - ),为什么新的Date()不接受?

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

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

不是.约定支持许多格式(请参阅MDN日期),但是您不应该依赖它,因为某些浏览器在某些浏览器中解析或解析不同,而不是其他浏览器.

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

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

PS

如果您只想将'2016-12-16 07:02:15 am'重新格式化为'2016年12月12日上午07:02:15',那么:

// 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))
Run Code Online (Sandbox Code Playgroud)