如何在 JS 中正确解析日期
How to parse Date properly in JS?
我试图通过在 JS中使用以下代码检查日期字符串是否为日期类型,
var dateString = "2015";
Date.parse(dateString)
但它始终将解析的字符串作为1420070400000返回。
在 C# 中
如果我使用 DateTime.TryParse 方法检查日期字符串,它会给出错误的结果,因为"2015"不是日期。
DateTime.TryParse("2015", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)
谁能建议我检查日期字符串是否为日期的最佳方法是什么?
也许这可以帮助你,但我不确定。
function isStringValidDate(ds)
{
var d=new Date(ds);
if(d && d.getFullYear()>0)
return true;
else
return false;
}
Date.parse 返回自 1970 年 1 月 1 日 00:00:00 UTC 或 NaN 以来的毫秒数(如果无效)。
要检索有效的日期对象,还必须构造一个新的日期对象
new Date(Date.parse(2015))
当然,如果你想要更多的 c# 风格,你可以扩展字符串或日期原型
String.prototype.TryParseToDate = function() {
var parsedDate = Date.parse(this);
// todo, implement errorhandling
return new Date(parsedDate);
};
"2015".TryParseToDate(); // this returns the parsed date
Date.prototype.TryParse = function(inputString) {
var parsedDate = Date.parse(inputString);
// todo, implement errorhandling
return new Date(parsedDate);
};
var date = new Date();
date.TryParse("2015"); // this returns the parsed date
错误处理示例
String.prototype.TryParseToDate = function() {
var parsedDate = Date.parse(this);
if(isNaN(parsedDate)){
throw "Not a valid date";
}
return new Date(parsedDate);
};
try {
"IWillCrash".TryParseToDate();
}
catch(err) {
console.log(err);
}
更新
正如@orhor所指出的,扩展原型可能被认为是一种反模式,特别是当你正在构建大型系统时。对于小的,我会说nae,不要打扰。如果需要,有几个选项,我通常会构建一个 util 库或将所有内容包装在我自己的类中,后者是我最喜欢的,因为它在项目增长时扩展得很好。
下面是一个日期实用程序包装器的示例。
var myDateUtils = function(){
var that = this;
that.TryParseToDate = function(value) {
var parsedDate = Date.parse(value);
if(isNaN(parsedDate)){
throw "Not a valid date";
}
return new Date(parsedDate);
};
// place other functions here
that.Greet = function(){
console.log("Hello");
}
// return constructed object
return that;
}
// construct object wrapper
var myDate = new myDateUtils();
myDate.Greet();
// Will crash
try {
var result = myDate.TryParseToDate("IWillCrash");
console.log(result);
}
catch(err) {
console.log(err);
}
// Will succeed
try {
var result = myDate.TryParseToDate("2015");
console.log(result);
}
catch(err) {
console.log(err);
}
相关文章:
- 如何在moment.js中只比较日期
- 使用时刻.js从日期时间中提取时间
- Mongodb/JS:查找最短(最早)日期
- 如何用moment.js列出两个日期之间的所有月份
- 在瞬间格式化日期.js给出 1/1/2016
- 立即获取 EST 日期.js
- 使用日期.js分析方法,而不是当前日期
- ISO 8601日期JS解释差异-IE/FF与Chrome
- 当前日期js代码中字体颜色不变
- 使用时刻修改日期.js
- 如何使用控制器中的过滤器比较日期.js
- 日期.js“tt”格式不起作用
- 从周数生成日期.js
- 这是尝试解析带有时刻的 ASP.NET 日期.js库的错误还是我的代码错误
- 限制名称和日期js cookie每次会话只加载一次
- 生成两个范围之间的日期(js)
- 如何添加月份到日期?js
- 用日期JS/JQ填充字段
- 由时刻生成的日期.js具有无效的属性
- 如何在瞬间比较两个日期.js