如何在JS中正确解析日期?

时间:2016-04-20 05:21:00

标签: javascript c#

我尝试使用 JS 中的以下代码检查日期字符串是否为日期类型,

var dateString = "2015";
Date.parse(dateString)

但它总是将解析后的字符串返回为1420070400000。

在C#

如果我使用 DateTime.TryParse 方法检查日期字符串,则会将 false 结果作为" 2015"不是约会。

DateTime.TryParse("2015", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)

任何人都可以建议我检查日期字符串的最佳方法是否为日期?

2 个答案:

答案 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;
}