2010-02-03 270 views
3

采取被格式化像一个字符串的最好方法......日期字符串格式化

YYYY-MM-DD

,并使它看起来像...

MM/DD/YYYY

的原因,它是不是JavaScript日期对象是因为我正在处理大量数据,并且这些日期正在从数据库中提取。

我看不需要将它转换为日期对象。

+0

可能以某种身份或其他重复...不能在第一次搜索 – 2010-02-03 18:21:56

+0

这是最好日期时间解析和格式化解决发现了什么,不是字符串操作作为标签建议。 – 2010-02-03 18:22:31

回答

4

如何:

s.substr(5,2) + '/' + s.substr(8) + '/' + s.substr(0,4) 
+1

不错的单行。 :-) – cjstehno 2010-02-03 18:27:07

+0

@cjstehno:我也换了一天一天,但现在已经修好了。 :) – Guffa 2010-02-03 18:28:11

+0

+1和简洁的接受 – 2010-02-03 18:32:40

1

通过蛮力,你可以这样做:

var old = '2010-02-03'.split('-'); 
var desired = old[1] + '/' + old[2] + '/' + old[0]; 

保存与Date对象工作的麻烦。

+0

不要过于迂腐,但这是行不通的。 'new'是Javascript中的保留字。你将不得不使用不同的变量名称。 – ghoppe 2010-02-03 19:13:29

+0

大声笑...我修好了,很好。 :-) – cjstehno 2010-02-03 21:23:17

1

您可以使用JavaScript的(假设JS,因为你的问题被标记为这样)正则表达式:

var date = "2010-05-09"; 
var formatted = date.replace(/([0-9]{4})-([0-9]{2})-([0-9]{2})/, "$2/$3/$1") 

我喜欢什么这更比使用字符串是,它似乎更加明显正在做什么。

1

如果你用斜杠它将解析取代破折号,那么你可以使用日期函数来获取各种组件(或转换使用不同的toString()函数的一个字符串)。

var date = new Date(Date.parse(old.replace(/-/g,'/'))); 
alert(date.getMonth() + '/' + date.getDate() + '/' + date.getFullYear()); 

这样做的好处是能够将日期用作计算日期,而不仅仅是进行字符串格式化。如果字符串格式是所有你需要的你的日期字符串总是有效的,那么使用@Guffa的substr方法可能是处理它的最好方法。

+0

日期没有功能,并始终有效(他们插入作为时间戳通过MySQL)...所以至少我希望mysql的datestamp格式将是有效的! lol – 2010-02-03 19:20:39

+0

实际上,在我的测试中,vivin的正则表达式的速度快了20%。最慢的方法是将cjstehno分成数组和组合方法。 – ghoppe 2010-02-03 19:32:30

+1

@ghoppe - 好的,但我会向你提出“更快”并不总是等同于“更好”。可读性也是一个问题。根据你的正则表达式foo,正则表达式的解决方案可能简直难以理解,而任何人都应该能够找出substr。实际上,我发现我是最易理解的,尽管它可能是最慢的。任何不能立即看到它做什么的人都不应该编程。 :-) – tvanfosson 2010-02-03 19:40:56