在js中将string转换为date
如何在js中将string转换为date?
var st = "date in some format" var dt = new date(); var dt_st= //st in date format same as dt
stringparsing的最佳string格式是dateISO格式以及JavaScript Date对象构造函数。
ISO格式的示例: YYYY-MM-DD
或YYYY-MM-DDTHH:MM:SS
。
可是等等! 只是使用“ISO格式”本身并不可靠。 string有时被parsing为UTC,有时也被parsing为本地时间(基于浏览器供应商和版本)。 最佳做法应始终是将date存储为UTC,并按UTC计算。
要将dateparsing为UTC,请附加一个Z – 例如: new Date('2011-04-11T10:20:30Z')
。
要以UTC显示date,请使用.toUTCString()
,
要在用户的本地时间显示date,请使用.toString()
。
更多关于MDN |的信息 date和这个答案 。
对于旧的Internet Explorer兼容性(IE版本低于9不支持Date构造函数中的ISO格式),您应该将date时间string表示拆分为它的部分,然后可以使用构造函数使用datetime部分,例如: new Date('2011', '04' - 1, '11', '11', '51', '00')
。 请注意,月份数量必须less于1个。
备用方法 – 使用适当的库:
您也可以利用图书馆Moment.js ,它允许parsingdate与指定的时区。
不幸的是我发现了
var mydate = new Date('2014-04-03'); console.log(mydate.toDateString());
返回“2014年4月2日星期三”。 我知道这听起来很疯狂,但对一些用户来说却是这样。 防弹解决scheme如下
var parts ='04/03/2014'.split('/'); //please put attention to the month (parts[0]), Javascript counts months from 0: // January - 0, February - 1, etc var mydate = new Date(parts[2],parts[0]-1,parts[1]);
var st = "26.04.2013"; var pattern = /(\d{2})\.(\d{2})\.(\d{4})/; var dt = new Date(st.replace(pattern,'$3-$2-$1'));
输出将是:
dt => Date {Fri Apr 26 2013}
function stringToDate(_date,_format,_delimiter) { var formatLowerCase=_format.toLowerCase(); var formatItems=formatLowerCase.split(_delimiter); var dateItems=_date.split(_delimiter); var monthIndex=formatItems.indexOf("mm"); var dayIndex=formatItems.indexOf("dd"); var yearIndex=formatItems.indexOf("yyyy"); var month=parseInt(dateItems[monthIndex]); month-=1; var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]); return formatedDate; } stringToDate("17/9/2014","dd/MM/yyyy","/"); stringToDate("9/17/2014","mm/dd/yyyy","/") stringToDate("9-17-2014","mm-dd-yyyy","-")
new Date(2000, 10, 1)
2000,10,1 new Date(2000, 10, 1)
会给你“Wed Nov 01 2000 00:00:00 GMT + 0100(CET)”
看到月份的0就是1月份
将它作为Date()的parameter passing:
var st = "date in some format" var dt = new Date(st);
您可以使用例如dt.getMonth()
来访问date,月份和年份。
如果你可以使用极好的时刻库(例如在一个Node.js项目中),你可以很容易地parsing你的date,例如
var momentDate = moment("2014-09-15 09:00:00");
并可以通过访问JSdate对象
momentDate ().toDate();
如果你想从格式“dd / MM / yyyy”转换。 这里是一个例子:
var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/; var arrayDate = stringDate.match(pattern); var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]);
此解决scheme适用于less于9的IE版本。
moment.js( http://momentjs.com/ )是一个完整的,使用date和支持ISO 8601string的包 。
你可以添加stringdate和格式。
moment("12-25-1995", "MM-DD-YYYY");
你可以检查date是否有效。
moment("not a real date").isValid(); //Returns false
请参阅文档http://momentjs.com/docs/#/parsing/string-format/
build议:我build议使用包含很多格式的date的包,因为时区和格式时间pipe理确实是一个大问题,现在js解决了很多格式。 你可以很容易地parsingdate从一个简单的stringdate,但我认为这是一个艰巨的工作,以支持所有格式和date的变化。
Date.parse
几乎让你想要什么。 它在am
/ pm
部分呛,但有一些黑客,你可以得到它的工作:
var str = 'Sun Apr 25, 2010 3:30pm', timestamp; timestamp = Date.parse(str.replace(/[ap]m$/i, '')); if(str.match(/pm$/i) >= 0) { timestamp += 12 * 60 * 60 * 1000; }
时间戳应该被转换为一个数字
var ts = '1471793029764'; ts = Number(ts); // cast it to a Number var date = new Date(ts); // works var invalidDate = new Date('1471793029764'); // does not work. Invalid Date
检查出datejs库http://www.datejs.com/
对于那些正在寻找小巧智能解决scheme的人来说:
String.prototype.toDate = function(format) { var normalized = this.replace(/[^a-zA-Z0-9]/g, '-'); var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-'); var formatItems = normalizedFormat.split('-'); var dateItems = normalized.split('-'); var monthIndex = formatItems.indexOf("mm"); var dayIndex = formatItems.indexOf("dd"); var yearIndex = formatItems.indexOf("yyyy"); var hourIndex = formatItems.indexOf("hh"); var minutesIndex = formatItems.indexOf("ii"); var secondsIndex = formatItems.indexOf("ss"); var today = new Date(); var year = yearIndex>-1 ? dateItems[yearIndex] : today.getFullYear(); var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1; var day = dayIndex>-1 ? dateItems[dayIndex] : today.getDate(); var hour = hourIndex>-1 ? dateItems[hourIndex] : today.getHours(); var minute = minutesIndex>-1 ? dateItems[minutesIndex] : today.getMinutes(); var second = secondsIndex>-1 ? dateItems[secondsIndex] : today.getSeconds(); return new Date(year,month,day,hour,minute,second); };
例:
"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss"); "2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");
我为此创build了一个小提琴,可以在任何datestring上使用toDate()函数并提供date格式。 这将返回一个Date对象。 https://jsfiddle.net/Sushil231088/q56yd0rp/
"17/9/2014".toDate("dd/MM/yyyy", "/")
刚刚new Date(st);
假设它是正确的格式。
为了сonvertingstringdate在JS我使用http://momentjs.com/
moment().format('MMMM Do YYYY, h:mm:ss a'); // August 16th 2015, 4:17:24 pm moment().format('dddd'); // Sunday moment().format("MMM Do YY"); // Aug 16th 15 moment().format('YYYY [escaped] YYYY'); // 2015 escaped 2015 moment("20111031", "YYYYMMDD").fromNow(); // 4 years ago moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago moment().startOf('day').fromNow(); // 16 hours ago moment().endOf('day').fromNow(); // in 8 hours
转换为格式pt-BR:
var dateString = "13/10/2014"; var dataSplit = dateString.split('/'); var dateConverted; if (dataSplit[2].split(" ").length > 1) { var hora = dataSplit[2].split(" ")[1].split(':'); dataSplit[2] = dataSplit[2].split(" ")[0]; dateConverted = new Date(dataSplit[2], dataSplit[1]-1, dataSplit[0], hora[0], hora[1]); } else { dateConverted = new Date(dataSplit[2], dataSplit[1] - 1, dataSplit[0]); }
我希望帮助别人!
如果您需要在转换为date格式之前检查string的内容:
// Convert 'M/D/YY' to Date() mdyToDate = function(mdy) { var d = mdy.split(/[\/\-\.]/, 3); if (d.length != 3) return null; // Check if date is valid var mon = parseInt(d[0]), day = parseInt(d[1]), year= parseInt(d[2]); if (d[2].length == 2) year += 2000; if (day <= 31 && mon <= 12 && year >= 2015) return new Date(year, mon - 1, day); return null; }
我做了这个函数将任何date对象转换为UTCdate对象。
function dateToUTC(date) { return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()); } dateToUTC(new Date());
ISO 8601等级的date字符与标准一样出色,但仍然没有得到广泛的支持。
这是一个很好的资源来找出你应该使用哪种datestring格式:
http://dygraphs.com/date-formats.html
是的,这意味着你的datestring可以是简单的,而不是
"2014/10/13 23:57:52"
而不是"2014-10-13 23:57:52"
var date = new Date(year, month, day);
要么
var date = new Date('01/01/1970');
datestring格式'01 – 01-1970'将不能在FireFox中使用,所以在date格式string中最好使用“/”而不是“ – ”。
//little bit of code for Converting dates var dat1 = document.getElementById('inputDate').value; var date1 = new Date(dat1)//converts string to date object alert(date1); var dat2 = document.getElementById('inputFinishDate').value; var date2 = new Date(dat2) alert(date2);
在angularjs中使用$ filter服务将date更改为您需要的格式,如下所示
$filter('date')(response[19], 'dd-MMM-yyyy') // 31-Dec-2010
var a = "13:15" var b = toDate(a, "h:m") alert(b); function toDate(dStr, format) { var now = new Date(); if (format == "h:m") { now.setHours(dStr.substr(0, dStr.indexOf(":"))); now.setMinutes(dStr.substr(dStr.indexOf(":") + 1)); now.setSeconds(0); return now; } else return "Invalid Format"; }
还有另一种方法来做到这一点:
String.prototype.toDate = function(format) { format = format || "dmy"; var separator = this.match(/[^0-9]/)[0]; var components = this.split(separator); var day, month, year; for (var key in format) { var fmt_value = format[key]; var value = components[key]; switch (fmt_value) { case "d": day = parseInt(value); break; case "m": month = parseInt(value)-1; break; case "y": year = parseInt(value); } } return new Date(year, month, day); }; a = "3/2/2017"; console.log(a.toDate("dmy")); // Date 2017-02-03T00:00:00.000Z
使用这个代码:(我的这个代码解决了这个问题)
function dateDiff(date1, date2){ var diff = {} // Initialisation du retour var tmp = date2 - date1; tmp = Math.floor(tmp/1000); // Nombre de secondes entre les 2 dates diff.sec = tmp % 60; // Extraction du nombre de secondes tmp = Math.floor((tmp-diff.sec)/60); // Nombre de minutes (partie entière) diff.min = tmp % 60; // Extraction du nombre de minutes tmp = Math.floor((tmp-diff.min)/60); // Nombre d'heures (entières) diff.hour = tmp % 24; // Extraction du nombre d'heures tmp = Math.floor((tmp-diff.hour)/24); // Nombre de jours restants diff.day = tmp; return diff;
}
使用这种格式….
//get current date in javascript var currentDate=New Date(); // for getting a date from a textbox as string format var newDate=document.getElementById("<%=textBox1.ClientID%>").value; // convert this date to date time var MyDate=New Date(newDate);
你也可以这样做:mydate.toLocaleDateString();