在javascript中更改日期格式

时间:2017-01-19 12:59:28

标签: javascript date

我的日期格式如 dd.mm.yyyy

  

24.1.2017 00:00:00

结果我想要

  

2017年1月24日

我写了这个函数来改变日期以格式化我想要的格式。

 Date.prototype.yyyymmdd = function() {
                var mm = this.getMonth() + 1; // getMonth() is zero-based
                var dd = this.getDate();

                return [this.getFullYear(),
                        (mm>9 ? '' : '0') + mm,
                        (dd>9 ? '' : '0') + dd
                ].join('/');
            };

            var date = new Date("@Model.BeginTime");

            $("#newsstart").val(date.yyyymmdd());

问题是将字符串转换为日期

var date = new Date("@Model.BeginTime");

这是无效的日期。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您可以使用moment库将UTC转换为您想要的格式。

你可能有点喜欢以下 moment(date).format("YYYY-MM-DD");

答案 1 :(得分:0)

时刻是要使用的js:)

  

不接受24.1.2017 00:00:00格式

这是因为你实现了错误的类或使用了无效的格式..

通过检查您的代码,我在 24.1.2017 00:00:00 中看到了这一点 不匹配此模式 dd.mm.yyyy

2017/01/24 的格式为 yyyy / MM / DD 格式

这里有一段代码可以更好地说明:)

var res1 = $("#result"); 

var dateForm = moment('24.1.2017 00:00:00','DD.M.YYYY hh:mm:ss').format('YYYY/MM/DD')
res1.text(dateForm);

 
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://momentjs.com/downloads/moment.js"></script>
<div id="result"></div>
 

答案 2 :(得分:0)

  

问题是将字符串转换为日期

var date = new Date("@Model.BeginTime");

您的问题是您使用Date构造函数来解析字符串,这是不推荐的。使用Date构造函数进行解析(和Date.parse,它们等效于解析)在很大程度上依赖于实现并且不可靠。您应该使用小函数或库将其解析为日期。

由于您很乐意使用格式函数扩展 Date.prototype ,您还可以使用等效的解析来扩展 String.prototype ,例如

&#13;
&#13;
String.prototype.parseYMD = function() {
  var b = this.split(/\D/);
  return new Date(b[0], b[1]-1, b[2]);
}

console.log('2017/01/21'.parseYMD().toString());
&#13;
&#13;
&#13;

或者您可以使用像fecha.js这样的小型库:

var date = fecha.parse('2017/01/24','YYYY/MM/DD');

PS

这里的具体问题是你的字符串类似于ISO 8601,但对于某些浏览器来说不够相似。有些人认为它是无效的ISO 8601并且返回无效的日期,其他人会认为它不是ISO 8601并将其解析为2017年1月24日的日期。根据ECMAScript,这两个结果都可以认为是正确的语言规范。