Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串转换为日期时间_Javascript_String_Date_Datetime_Type Conversion - Fatal编程技术网

Javascript 将字符串转换为日期时间

Javascript 将字符串转换为日期时间,javascript,string,date,datetime,type-conversion,Javascript,String,Date,Datetime,Type Conversion,如何将类似于'01-01-1970 00:03:44'的字符串转换为日期时间? var d=日期解析(“2005年7月8日”); 文件编写(d) 对于纯javascript格式的此格式(假设datepart的格式为dd mm yyyy),请使用dateString2Date [Edit]添加了一个ES6实用程序方法,使用格式字符串参数(format)解析日期字符串,以告知该方法日期/月/年在输入字符串中的位置 var result=document.querySelector('#resul

如何将类似于
'01-01-1970 00:03:44'
的字符串转换为日期时间?


var d=日期解析(“2005年7月8日”);
文件编写(d)
对于纯javascript格式的此格式(假设datepart的格式为dd mm yyyy),请使用
dateString2Date

[Edit]添加了一个ES6实用程序方法,使用格式字符串参数(
format
)解析日期字符串,以告知该方法日期/月/年在输入字符串中的位置

var result=document.querySelector('#result');
result.textContent=
`*固定的\n预算日期('01-01-2016 00:03:44'):\n=>${
dateString2Date('01-01-2016 00:03:44')};
result.textContent+=
`\n\n*带格式\n语法字符串('01-01-2016 00:03:44','dmy'):\n=>${
tryParseDateFromString('01-01-2016 00:03:44',“dmy”).ToutString()}`;
result.textContent+=
`\n\n带格式\n语法字符串('03/01/2016','mdy'):\n=>${
tryParseDateFromString('03/01/1943',“mdy”).ToutString()}`;
//固定格式dd-mm-yyyy
函数dateString2Date(dateString){
var dt=dateString.split(/\-\s/);
返回新日期(dt.slice(0,3).reverse().join('-')+''+dt[3]);
}
//多种格式(如yyyy/mm/dd或mm-dd-yyyy等)
函数tryParseDateFromString(dateStringCandidateValue,format=“ymd”){
如果(!dateStringCandidateValue){return null;}
设mapFormat=format
.拆分(“”)
.reduce(函数(a,b,i){a[b]=i;返回a;},{});
const dateStr2Array=dateStringCandidateValue.split(/[:\-\/]/g);
const datePart=dateStr2Array.slice(0,3);
让datePartFormatted=[
+datePart[mapFormat.y],
+datePart[mapFormat.m]-1,
+datePart[mapFormat.d]];
如果(dateStr2Array.length>3){
dateStr2Array.slice(3.forEach)(t=>datePartFormatted.push(+t));
}
//根据给定[格式]的测试日期有效性
const dateTrial=新日期(Date.UTC.apply(null,datePartFormatted));
return dateTrial&&dateTrial.getFullYear()==datePartFormatted[0]&&
dateTrial.getMonth()==datePartFormatted[1]&&
dateTrial.getDate()==datePartFormatted[2]
?试用日期:
无效的
}
formatDateTime(sDate,FormatType){
var lDate=新日期(sDate)
var月=新数组(12);
月[0]=“一月”;
月[1]=“2月”;
月[2]=“三月”;
月[3]=“4月”;
月[4]=“五月”;
月[5]=“6月”;
月[6]=“7月”;
月[7]=“8月”;
月[8]=“9月”;
月[9]=“10月”;
月[10]=“11月”;
月[11]=“12月”;
var weekday=新数组(7);
工作日[0]=“周日”;
工作日[1]=“周一”;
工作日[2]=“星期二”;
工作日[3]=“星期三”;
工作日[4]=“周四”;
工作日[5]=“周五”;
工作日[6]=“周六”;
var hh=lDate.getHours()<10?'0'+
lDate.getHours():lDate.getHours();
var mi=lDate.getMinutes()<10?'0'+
lDate.getMinutes():lDate.getMinutes();
var ss=lDate.getSeconds()<10?'0'+
lDate.getSeconds():lDate.getSeconds();
var d=lDate.getDate();
var dd=d<10?'0'+d:d;
var yyyy=lDate.getFullYear();
var mon=eval(lDate.getMonth()+1);

var mm=(mon使用
新日期(字符串)
保持简单。这应该可以做到

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)
参考:


编辑:“Code Different”留下了一条宝贵的评论,由于浏览器的差异,MDN不再建议使用Date作为构造函数。虽然上面的代码在Chrome(v87.0.x)和Edge(v87.0.x)中运行良好,但在Firefox(v84.0.2)中出现了“无效日期”错误

解决此问题的一种方法是确保字符串采用更通用的格式YYYY-MM-DD(),例如,
const s='1970-01-01 00:03:44';
,这似乎在三种主要浏览器中都可以使用,但这并不能完全回答最初的问题。

您可以使用该库

然后简单地说:

var stringDate = '01-01-1970 00:03:44';
var momentDateObj = moment(stringDate);
签出他们的api也有助于格式化、添加、减去(天、月、年、其他瞬间对象)

我希望这有帮助

Rhys

对于纯javascript格式的此格式(假定datepart的格式为dd mm yyyy):
var dt='01-01-1970 00:03:44'。拆分(/\-\s/)
dat=新日期(dt.slice(0,3).reverse().join('/')+''+dt[3]);


嗯,我想我应该提到一个解决方案,我是通过一些尝试发现的。在修复某个人将日期作为字符串进行比较的缺陷时发现的

新日期(Date.parse('01-01-1970 01:03:44'))

使用
Date.parse()
可以获得unix时间戳

date = new Date( Date.parse("05/01/2020") )
//Fri May 01 2020 00:00:00 GMT
var dt='01-02-20212:22:55'。拆分(/\-\s/)
dat=新日期(dt.slice(0,3).reverse().join('/')+''+dt[3]);

console.log(dat.toLocaleDateString())
您的问题可能与此问题重复:请检查此项;它对我有效。为什么这不是所选的答案?这可能是这里最直观的答案。在safari上不是。使用此字符串格式执行此操作会导致无效日期有关safari问题的更多信息:如果可能,我建议您使用接受答案中引用的日期字符串格式。希望Safari最终符合标准。同时,如果这对您来说是一个问题,则可能需要额外的库。不要使用此方法。日期时间格式特定于浏览器。From:“注意:使用
日期
构造函数解析日期字符串(和
Date.parse()您如何知道您的stringDate的结构是dd-mm而不是mm-dd?如果中文浏览器的本地设置将01-01-1970称为mm-dd-yyyy,而另一个浏览器位于另一个位置是dd-mm-yyyy,该怎么办?支持所有这些设置:)一般来说,如果答案包含解释,会更有帮助
var unixTimeZero = Date.parse('01 Jan 1970 00:00:00 GMT');
var javaScriptRelease = Date.parse('04 Dec 1995 00:12:00 GMT');

console.log(unixTimeZero);
// expected output: 0

console.log(javaScriptRelease);
// expected output: 818035920000
date = new Date( Date.parse("05/01/2020") )
//Fri May 01 2020 00:00:00 GMT