如何将字符串转换'01-01-1970 00:03:44'
为日期时间?
将字符串转换为日期时间
IT技术
javascript
string
date
datetime
type-conversion
2021-02-19 20:01:49
6个回答
保持简单new Date(string)
。这个应该可以...
const s = '01-01-1970 00:03:44';
const d = new Date(s);
console.log(d); // ---> Thu Jan 01 1970 00:03:44 GMT-0500 (Eastern Standard Time)
参考:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
编辑: “代码不同”留下了一个有value的评论,由于浏览器的差异,MDN 不再建议使用 Date 作为这样的构造函数。虽然上面的代码在 Chrome (v87.0.x) 和 Edge (v87.0.x) 中运行良好,但它在 Firefox (v84.0.2) 中给出了“无效日期”错误。
解决此问题的一种方法是确保您的字符串采用更通用的格式 YYYY-MM-DD(强制 xkcd),例如const s = '1970-01-01 00:03:44';
,这似乎适用于三个主要浏览器,但这并不能完全回答原始问题。
对于这种格式(假设 datepart 的格式为 dd-mm-yyyy),在纯 javascript 中使用dateString2Date
.
[编辑] 添加了一个 ES6 实用程序方法来使用格式字符串参数 ( format
)来解析日期字符串,以通知该方法有关日期/月/年在输入字符串中的位置。
var result = document.querySelector('#result');
result.textContent =
`*Fixed\ndateString2Date('01-01-2016 00:03:44'):\n => ${
dateString2Date('01-01-2016 00:03:44')}`;
result.textContent +=
`\n\n*With formatting\ntryParseDateFromString('01-01-2016 00:03:44', 'dmy'):\n => ${
tryParseDateFromString('01-01-2016 00:03:44', "dmy").toUTCString()}`;
result.textContent +=
`\n\nWith formatting\ntryParseDateFromString('03/01/2016', 'mdy'):\n => ${
tryParseDateFromString('03/01/1943', "mdy").toUTCString()}`;
// fixed format dd-mm-yyyy
function dateString2Date(dateString) {
var dt = dateString.split(/\-|\s/);
return new Date(dt.slice(0,3).reverse().join('-') + ' ' + dt[3]);
}
// multiple formats (e.g. yyyy/mm/dd or mm-dd-yyyy etc.)
function tryParseDateFromString(dateStringCandidateValue, format = "ymd") {
if (!dateStringCandidateValue) { return null; }
let mapFormat = format
.split("")
.reduce(function (a, b, i) { a[b] = i; return a;}, {});
const dateStr2Array = dateStringCandidateValue.split(/[ :\-\/]/g);
const datePart = dateStr2Array.slice(0, 3);
let datePartFormatted = [
+datePart[mapFormat.y],
+datePart[mapFormat.m]-1,
+datePart[mapFormat.d] ];
if (dateStr2Array.length > 3) {
dateStr2Array.slice(3).forEach(t => datePartFormatted.push(+t));
}
// test date validity according to given [format]
const dateTrial = new Date(Date.UTC.apply(null, datePartFormatted));
return dateTrial && dateTrial.getFullYear() === datePartFormatted[0] &&
dateTrial.getMonth() === datePartFormatted[1] &&
dateTrial.getDate() === datePartFormatted[2]
? dateTrial :
null;
}
<pre id="result"></pre>
您可以使用moment.js库。
然后简单地:
var stringDate = '01-01-1970 00:03:44';
var momentDateObj = moment(stringDate);
也检查他们的 api,有助于格式化、添加、减去(天、月、年、其他时刻对象)。
我希望这有帮助。
里斯
http://www.w3schools.com/jsref/jsref_parse.asp
<script type="text/javascript">
var d = Date.parse("Jul 8, 2005");
document.write(d);<br>
</script>
好吧,我想我应该提到我通过一些尝试遇到的解决方案。在修复某人将日期作为字符串进行比较时发现的缺陷。
新日期(Date.parse('01-01-1970 01:03:44'))