我的日期格式如 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");
这是无效的日期。我该如何解决这个问题?
答案 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 ,例如
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;
或者您可以使用像fecha.js这样的小型库:
var date = fecha.parse('2017/01/24','YYYY/MM/DD');
这里的具体问题是你的字符串类似于ISO 8601,但对于某些浏览器来说不够相似。有些人认为它是无效的ISO 8601并且返回无效的日期,其他人会认为它不是ISO 8601并将其解析为2017年1月24日的日期。根据ECMAScript,这两个结果都可以认为是正确的语言规范。