我尝试使用 JS 中的以下代码检查日期字符串是否为日期类型,
var dateString = "2015";
Date.parse(dateString)
但它总是将解析后的字符串返回为1420070400000。
在C#
如果我使用 DateTime.TryParse 方法检查日期字符串,则会将 false 结果作为" 2015"不是约会。
DateTime.TryParse("2015", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)
任何人都可以建议我检查日期字符串的最佳方法是否为日期?
答案 0 :(得分:0)
Date.parse返回自1970年1月1日00:00:00 UTC或NaN(如果无效)以来的毫秒数。
要检索有效的日期对象,您还必须构建一个新的日期对象
new Date(Date.parse(2015))
如果你想要更多c#style
,你当然可以扩展字符串或日期原型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);
}
答案 1 :(得分:0)
也许这可以帮助你,但我不确定。
function isStringValidDate(ds)
{
var d=new Date(ds);
if(d && d.getFullYear()>0)
return true;
else
return false;
}