这是我的代码:
var exampleDate='23-12-2010 23:12:00';
var date=new Date(exampleDate);//returns invalid Date
var date1=Date.parse(exampleDate);//returns NAN
我想将上面的字符串转换为日期。所以我已经编写了一个代码,如上所示。
此代码在IE
和Opera
中正常运行,但date
变量返回无效日期,date1
正在NAN
返回mozilla Firefox
1}},我该怎么办?
答案 0 :(得分:25)
示例中的字符串不是浏览器识别的任何标准格式。 ECMAScript规范要求浏览器只能解析一种标准格式:
格式如下:
YYYY-MM-DDTHH:mm:ss.sssZ
此格式包含仅限日期的表格:
YYYY
YYYY-MM
YYYY-MM-DD
它还包括附加了可选时区偏移的仅限时间的表单:
THH:mm
THH:mm:ss
THH:mm:ss.sss
还包括“日期时间”,其可以是上述的任何组合。
如果String不符合该格式,则该函数可能会回退到任何格式 特定于实现的启发式或特定于实现的日期格式。无法识别的字符串或日期 包含格式为String的非法元素值将导致Date.parse返回NaN。
因此,在您的示例中,使用2010-12-23T23:12:00
是唯一可以保证工作的字符串。实际上,大多数浏览器还允许格式DD Month YYYY
或Month DD, YYYY
的日期,因此23 Dec 2010
和Dec 23, 2010
等字符串也可以使用。
答案 1 :(得分:6)
以上格式仅在IE和Chrome中支持。
请尝试使用其他格式。以下是一些格式和支持浏览器。
<script type="text/javascript">
//var dateString = "03/20/2008"; // mm/dd/yyyy [IE, FF]
var dateString = "2008/03/20"; // yyyy/mm/dd [IE, FF]
// var dateString = "03-20-2008"; // mm-dd-yyyy [IE, Chrome]
// var dateString = "March 20, 2008"; // mmmm dd, yyyy [IE, FF]
// var dateString = "Mar 20, 2008"; // mmm dd, yyyy [IE, FF]
// Initalize the Date object by passing the date string variable
var myDate = new Date(dateString);
alert(myDate);
</script>
答案 2 :(得分:4)
您可以使用正则表达式手动解析它,然后使用日期元素调用日期构造函数,如下所示:
var parseDate = function(s) {
var re = /^(\d\d)-(\d\d)-(\d{4}) (\d\d):(\d\d):(\d\d)$/;
var m = re.exec(s);
return m ? new Date(m[3], m[2]-1, m[1], m[4], m[5], m[6]) : null;
};
var dateStr = '23-12-2010 23:12:00';
parseDate(dateStr).toString(); //=> Thu Dec 23 2010 23:12:00 GMT-0800
答案 3 :(得分:2)
JavaScript应至少支持以下dateStrings转换:
* yyyy/MM/dd
* MM/dd/yyyy
* MMMM dd, yyyy
* MMM dd, yyyy
尝试:
var exampleDate='12/23/2010 23:12:00';
var date = new Date(exampleDate);
答案 4 :(得分:1)
使用datejs和此代码:
var exampleDate='23-12-2010 23:12:00';
var myDate = Date.parseExact(exampleDate, 'dd-MM-yyyy hh:mm:ss');
myDate
应该是一个正确构造的Date
对象。
答案 5 :(得分:0)
只需使用以下格式:
var exampleDate='2010-12-23 23:12:00';
答案 6 :(得分:0)
@casablanca 有一个很好的答案,但已经 10 多年了,这在 Google 中仍然很重要,所以我想我会更新一个新答案。
TL;DR
OpaquePointer
背景:日期有多种格式,但您大多会收到:
// Use an ISO or Unix time string to generate `Month DD, YYYY`
const newDate = new Date('23-12-2010')
const simpleDate = `${newDate.toLocaleString('en-us', { month: 'long' } )} ${newDate.getDate()}, ${newDate.getFullYear()}`
// yields: December, 23 2010 (if you want date suffix, read until the end)
),其中 YYYY-MM-DDTHH:mm:ss.sssZ
是 UTC 时区偏移量。您也可能会得到它的一个子集(即 Z
)YYYY-MM-DD
),其中数字实际上是自 Unix 时间(1970 年 1 月 1 日)开始以来经过的总毫秒数。基础: JS 有一个内置的 Date 原型,它接受 ISO 8601 和派生词(只是时间或日期)。您可以使用 1539734400
实例化并返回一个日期对象,或者您可以使用 new Date
方法返回一个 Unix 时间戳。
Date.parse()
您还可以将日期分成 7 个参数:年、月(从 0 开始)、日、小时、分钟、秒和毫秒以及时区偏移量 - 注意,我使用了 multi -params 在我的职业生涯中只接近过一次。由于我在德克萨斯州,当我运行以下命令时,我得到了 UTC-5(中部时间):
const dateObj = new Date('23-12-2010:23:12:00') // returns date object
const dateDateOnly = new Date('23-12-2010') // returns date object
const dateTimeOnly = new Date('23:12:00') // returns date object
const dateString = Date.parse('23-12-2010:23:12:00') // returns Unix timestamp string
New-ish Stuff const dateByParam = new Date(2021, 2, 26, 13, 50, 13, 30) // Fri Mar 26 2021 13:50:13 GMT-0500 (Central Daylight Time)
: 通常,toLocaleString
对象的返回仍然非常密集,就像我们上一个示例 (Date
) 一样,因此需要额外的方法已添加以帮助开发人员。
通常,对于日期,我想要像 Fri Mar 26 2021 13:50:13 GMT-0500 (Central Daylight Time
这样的东西 - 很长一段时间以来很容易获得日期和年份:
March 21st, 2021
但我总是不得不构建一个函数来将 // Assuming myDate is a JS Date object...
myDate.getDate() // date on the calendar, ie 22
myDate.getDay() // day of the week, where 0 means Sunday, 1 means monday, etc
myDate.getFullYear() // 4 digit year, ie, 2021
变成 getDay
,现在不再需要了。 January, February, March
为您提供一些新的超能力。您可以向它传递两个参数,一个表示区域的字符串(即 toLocaleString()
)和一个包含您想要返回的内容的对象(即 en-us
)。如果需要,这有助于国际化响应。
{ month: 'long' }
日期后缀我仍然没有看到任何内置的方法来获取日期的后缀,比如 // Again, assuming myDate is a JS Date object...
myDate.toLocaleString('en-us', { month: 'long' } ) // March
,所以我构建了这个使用模数 {{1} 的实用函数}} 运算符来检查每天数字的除数并应用正确的后缀(针对美国观众,但其他地方可能相同?)。
th, st
现在总而言之..到达这里的路很长,但如果我得到一个 ISO 或 Unix 日期并且我想要 %
,这就是我运行的:
/**
* setDateSuffix()
*
* Desc: Takes two digit date, adds 'st', 'nd', 'rd', etc
*
* @param { integer } num - a number date
*/
export const setDateSuffix = (num) => {
const j = num % 10,
k = num % 100
if (j === 1 && k !== 11) {
return num + "st";
}
if (j === 2 && k !== 12) {
return num + "nd";
}
if (j === 3 && k !== 13) {
return num + "rd";
}
return num + "th";
}
注意 - 当 Month DDth, YYYY
在 JS 中成为现实:https://github.com/tc39/proposal-temporal 时,所有这些都可能会改变,希望变得更好。期待有人在 2030 年更新这篇文章!