2013-05-18 122 views
4

我需要将04/06/13(例如)转换为长期日期 - 星期二2013年6月4日00:00:00 GMT + 0100(BST)。我怎样才能使用Javascript来做到这一点?我知道如何将长日期转换为短日期 - 而不是相反。如何在JavaScript中将短日期转换为长日期?

+0

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toISOString – techfoobar

回答

3

你可以尝试Date constructorparsing functionality,其结果,那么你可以stringify

> new Date("04/06/13").toString() 
"Sun Apr 06 1913 00:00:00 GMT+0200" // or something 

但分析是实现相关的,并且不会有很多引擎正确解释您的奇DD/MM/YY格式。如果您使用过MM/DD/YYYY,那么它可能会被无处不在。

相反,你要确保它是如何解析的,所以必须自己做和单件送入构造:

var parts = "04/06/13".split("/"), 
    date = new Date(+parts[2]+2000, parts[1]-1, +parts[0]); 
console.log(date.toString()); // Tue Jun 04 2013 00:00:00 GMT+0200 
+0

这是奇怪,因为在Chrome V25 “新的日期(” 04/06/13“)”评估为“Sat Apr 2013 2013 00:00:00 GMT + 0200(CEST)” – Xotic750

+0

为什么这很奇怪?日期解析依赖于spec的实现,它只需要识别ISO8601和它自己的'toString'输出。我甚至会预计*像DD/MM/YY这样的奇怪格式无法在任何地方正确解析。 – Bergi

+0

我认为所有的实现默认为1900.因此,看到这种情况并非如此,这很奇怪或令人震惊。 – Xotic750

1

您可以使用:

new Date(2013, 06, 04) 

...或者直接使用日期字符串(即表示由parse方法接受一个日期的字符串):

new Date("2013/06/04"); 

...或通过指定日期的不同部分,如:

new Date(year, month, day [, hour, minute, second, millisecond]); 

查看this

0

你必须采取13 2013,否则将采取默认的1913年

alert(new Date('04/06/2013')); 
+0

否则它可能会默认为1913 – Xotic750

1

到分割方法的替代方法,使用lastIndexof和切片相反,年改变到ISO8601的格式,然后给出了已知可跨浏览器工作的非标准串,然后使用date parsing method。 (假设类似问题的固定模式)

然而,

如果你想确保它是如何解析的,你必须自己做, 的单件送入构造:

,这将意味着使用拆分方法,see @Bergi answer

var string = "04/06/13", 
    index = string.lastIndexOf("/") + 1, 
    date = new Date(string.slice(0, index) + (2000 + parseInt(string.slice(index), 10))); 

console.log(date); 

输出

Sat Apr 06 2013 00:00:00 GMT+0200 (CEST) 

jsfiddle

或另一替代是使用moments.js

var string = "04/06/13"; 

console.log(moment(string, "DD/MM/YY").toString()); 

输出

Sat Apr 06 2013 00:00:00 GMT+0200 (CEST) 

jsfiddle

+1

''04/06/2013“'不是[ISO 8601](http://en.wikipedia.org/wiki/ISO_8601) - 尽管已知这种格式适用于各种浏览器。 – Bergi

+0

谢谢,已更新ẗhe回答以反映此信息。 – Xotic750

+1

+1为Moment.js。在我所知的浏览器中始终如一地执行此操作的最可靠方法。 –

相关问题