我有一个格式为dd/MM/yyyy的日期字符串,我想从这个字符串创建一个Date对象.new Date(dd/MM/yyyy)不会工作..
我有这个代码,显然不起作用:
function createDateObject(value){
try{
return new Date(value.split('/').**swap(0, 1)**.join('/'));
}
catch(){
return null;
}
}
createDateObject('31/01/2014') => Fri Jan 31 2014 00:00:00 GMT-0200 (Local Daylight Time)
Run Code Online (Sandbox Code Playgroud)
这是最简单的方法吗?
如果我能在一行中完成它,我不想创建很多临时变量...
Sha*_*tta 10
由于您的问题是如何在字符串(dd/mm/yyyyto mm/dd/yyyy)中将月份与日期交换,这就是答案:
var dateString = "25/04/1987";
dateString = dateString.substr(3, 2)+"/"+dateString.substr(0, 2)+"/"+dateString.substr(6, 4);
Run Code Online (Sandbox Code Playgroud)
但是,如果要创建new Date()对象,则必须根据ISO 8601格式(dd/mm/yyyyto yyyy-mm-dd)更改字符串:
var dateString = "25/04/1987";
dateString = dateString.substr(6, 4)+"-"+dateString.substr(3, 2)+"-"+dateString.substr(0, 2);
var date = new Date(dateString);
Run Code Online (Sandbox Code Playgroud)
这个怎么样?
value = value.split("/");
var d = new Date(value[2], parseInt(value[1], 10)-1, value[0]);
Run Code Online (Sandbox Code Playgroud)
您必须1从月份中减去,因为 JavaScript 从0.
感谢 CBroe,我使用了它Array.reverse并且它与我的测试用例一起工作。
只是用reverse()替换了**swap:
function createDateObject(value) {
try {
return new Date(value.split('/').reverse().join('/'));
}
catch(e) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
它正确创建日期,但允许创建无效日期,例如 Feb/30/2014。
所以我还必须使用这个答案来验证字符串:
function createDateObject(value) {
try {
string formatted = value.split('/').reverse().join('/');
return isValidDate(formatted) ? new Date(formatted) : null;
} catch(e) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5400 次 |
| 最近记录: |