使用Angular js获取系统日期格式

时间:2016-10-12 11:46:43

标签: javascript angularjs date

我想使用Angular js获取系统日期格式。用户可能选择它为dd / mm / YYYY,dd / mm / yy ......等等,它可以是用户在他/她的计算机上选择的任何日期格式。是否可以获得日期格式?

- 编辑 -

我没有像2016年12月10日,2016年12月10日那样的日期价值...等等这个日期值我也需要从用户的系统中选择相同的格式用户已选择。

3 个答案:

答案 0 :(得分:0)

我认为你只能用Javascript找不到他/她的计算机日期格式。如果您在后端使用某种动态语言,则应尝试以这种方式检索时间格式。

答案 1 :(得分:0)

我认为你可以查看Mozilla MDN,但我相信JS无法获得这些信息,因为JS依赖于浏览器API。因此,如果浏览器API提供了那么它就可以了,否则使用任何框架,如.Net或Java等。

答案 2 :(得分:0)

不是完整的解决方案,但可以作为参考使用,您可以添加对新格式的支持。

逻辑

  • 为每年存在的特定日期创建日期对象。喜欢:31/12/2016
  • 现在搜索第一个非字母数字字符。这是你的分隔符。
  • 现在您有3个部分,通过将值与dd进行比较,您可以轻松找到31
  • 即使是年份部分也很简单,因为它可以包含2个值,162016
  • 月份可能很棘手。它可以有12DecDecember。为此,您可以进行2次检查。如果数字等于12,则为mm。如果数字和长度不是3,则mmm其他mmmm

现在,您可以创建var d = new Date('2016/12/31')并将d.toLocaleDateString()传递给下方的功能。



function getDateFormat(dateStr) {
  var delimiter = dateStr.match(/[^0-9a-z]/i)[0];
  var dateParts = dateStr.split(delimiter);
  var r = dateParts.map(function(d, i) {
    if (d == 31) {
      return "dd"
    } else if (!isNaN(d) && (d == 2016 || (d + 2000) == 2016)) {
      return d.toString().length === 4 ? "YYYY" : "yy"
    } else if (d == 12) {
      return "mm"
    } else if (isNaN(d)) {
      var _t = d.replace(/[^a-z]/gi, '')
      return _t.length === 3 ? "mmm" : "mmmm"
    }
  });
  return r.join(delimiter);
}

Date.prototype.getSystemDateFormat = function(){
  return getDateFormat(new Date('2016/12/31').toLocaleDateString());
}
//or
Date.prototype.SYSTEM_FORMAT = (function(){
  return getDateFormat(new Date('2016/12/31').toLocaleDateString());
})()

console.log(new Date().getSystemDateFormat())
console.log(new Date().SYSTEM_FORMAT)

var d1 = "12/31/2016"
console.log(getDateFormat(d1))

d1 = "31/12/2016"
console.log(getDateFormat(d1))

d1 = "31 December 2016"
console.log(getDateFormat(d1))

d1 = "31 Dec. 2016"
console.log(getDateFormat(d1))

d1 = "31-12-2016"
console.log(getDateFormat(d1))

d1 = "31.12.2016"
console.log(getDateFormat(d1))




您还可以向date.prototype添加函数以直接获取值,而不是每次都调用它,

Date.prototype.getSystemDateFormat = function(){
  return getDateFormat(new Date('2016/12/31').toLocaleDateString());
}
//or
Date.prototype.SYSTEM_FORMAT = (function(){
  return getDateFormat(new Date('2016/12/31').toLocaleDateString());
})()

编辑1

正如@ RobG正确指出的那样,date.toLocaleStringdate.toLocaleDateString并非在所有浏览器中统一。它们不受< IE11。所以这不是一个可靠的答案。你可以用它作为参考。