如何在JavaScript中将字符串"2010-1-10"转换为日期对象?

7

这个字符串可以通过使用getFullYear等方法获取。

能否反过来做呢?

6个回答

16

-替换为/,JavaScript就可以解析它。这是JS规范中的愚蠢错误(ISO日期/时间标准非常清楚,-是正确的)

var str = "2010-1-10";
alert(Date.parse(str.replace(/-/g,"/")));

可以尝试将以下内容粘贴到您的浏览器中:javascript:alert(Date.parse("2010-01-01".replace(/-/g,"/")));


嘿,那真的很棒!好的提示! - Roland Bouman
1
但它是一个数字,不是对象。 - user198729
1
你可以使用 new Date(number) - Jan Jongboom
Date.parse 返回的是日期字符串与1970年1月1日午夜之间的毫秒数,而不是一个 Date 对象。 - Michael Brook
@MichaelBrook:因此,来自Jan的提示。 - MSalters

8
var s = "2010-1-10".split('-');
var dateObj = new Date(Number(s[0]),Number(s[1]) -1 ,Number(s[2]))

1
var date = new Date();
var str = "2010-1-10";
var dateArray = str.split("-")
date.setFullYear(parseInt(dateArray[0]));
date.setMonth(parseInt(dateArray[1])-1);  // months indexed as 0-11, substract 1
date.setDate(parseInt(dateArray[2]));     // setDate sets the month of day 

0
Date.parse(datestring)

示例:返回从1970年1月1日到2005年7月8日的毫秒数:

var d = Date.parse("Jul 8, 2005");
alert(d);
// 1120773600000

这是不正确的。Date.parse无法处理2009-1-1。你必须将-替换为/ - Jan Jongboom

0

要从任何 ISO 8601 格式的字符串返回一个新的 Date 对象, 该字符串可以从 "2010-01-10" 到 "2010-01-10T19:42:45.5-05:00" 范围内, 需要查看几个模式。

秒数(由小数点前缀)和本地时区偏移量(由 '+' 或 '-' 前缀) 是这里代码的三分之三:

Date.parseISO= function(iso){
 var z, tem, TZ, ms= 0;
 z=  /:/.test(iso)? ' GMT': '';
 ms=/(\.\d+)/.exec(iso);
 if(ms){
  ms= ms[1];
  iso= iso.replace(ms,'');
  ms= Math.round(1000*ms);
 }
 if(z && !/Z$/.test(iso)){
  TZ=/:\d\d((\-|\+)(\d\d):(\d\d))$/.exec(iso);
  if(TZ){
   tem= TZ[3]*60+(+TZ[4]);
   z+= TZ[2]+tem;
   iso= iso.replace(TZ[1],'');
  }
 }
 iso= iso.replace(/[^\d:]/g,' ')+z;
 var stamp= Date.parse(iso);
 if(!stamp) throw iso +' Unknown date format';
 return new Date(stamp+ms);
}

// 如果您使用UTC(GMT),从JavaScript日期获取ISO字符串是最简单的

Date.prototype.toISO= function(time){
 var i=0, D= this, A= [D.getUTCFullYear(), D.getUTCMonth(), D.getUTCDate(),
 D.getUTCHours(), D.getUTCMinutes(), D.getUTCSeconds()];
 ++A[1];
 var T= A.splice(3);
 A= A.join('-');
 if(time){
  if(time==2) T.pop();
  while(i< T.length){
   if(T[i]<10) T[i]= '0'+T[i];
   ++i;
  }
  if(time==4)T[2]= T[2]+'.'+ 
  Math.round((this.getMilliseconds()/1000)*1000);
  return A+'T'+T.join(':')+'Z';
 }
 return A;
}

0
console.log(new Date('2010-01-10'));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接