javascript-字符串到日期-php iso字符串格式
我的日期格式为:javascript-字符串到日期-php iso字符串格式,javascript,date,format,iso,Javascript,Date,Format,Iso,我的日期格式为: 2010-11-30T08:32:22+0000 2010-11-27T20:59:17+0000 来自一个提要,以字符串格式转换为javascript,现在我想将其转换为一个日期对象。 我如何用javascript实现它 var someDate = new Date("2010-11-30T08:32:22+0000"); 我不认为这会更简单。也许这是一种过激的行为,但试试看这段代码在IE/Firefox/Chrome中可以工作: new Date("2010-11-30
2010-11-30T08:32:22+0000
2010-11-27T20:59:17+0000
来自一个提要,以字符串格式转换为javascript,现在我想将其转换为一个日期对象。 我如何用javascript实现它
var someDate = new Date("2010-11-30T08:32:22+0000");
我不认为这会更简单。也许这是一种过激的行为,但试试看这段代码在IE/Firefox/Chrome中可以工作:
new Date("2010-11-30T08:32:22+0000".replace(/-/g,'/').replace(/T/,' ').replace(/\+/,' +'))
它将2010-11-30T08:32:22+0000
更改为2010/11/30 08:32:22+0000
,然后从固定字符串创建日期对象
我不确定你是否应该用这个,它看起来真的很脏。这个食谱不考虑时区。您需要对其进行更多的修改,以使其与TZs一起工作。如果您确定时区始终为
+0000
,则此代码将起作用:
var s = "2010-11-30T08:32:22+0000";
// Replace non-digit characters with a space
s = s.replace(/\D/g," ");
// Split the string on space
var date_parts = s.split(" ");
// subtract 1 from month to use in Date constructor
var yyyy = date_parts[0],
mm = date_parts[1] - 1,
dd = date_parts[2],
hh = date_parts[3],
mi = date_parts[4],
ss = date_parts[5];
// Now, the date_parts has year, month, date and so on
var dt = new Date(yyyy, mm, dd, hh, mi, ss);
这是我从《新浏览器版本支持新日期》(“2010-11-30T08:32:22+0000”)(Chrome,FF4,IE9)中学到的一个略显冗长的版本,但旧浏览器不支持 如果时区不具有sence(在始终为零(您的情况)或省略的情况下),可以使用以下方法:
Date.fromISOString = (function(){
function fastDateParse(y, m, d, h, i, s, ms){
return new Date(y, m - 1, d, h || 0, i || 0, s || 0, ms || 0);
}
// result function
return function(isoDateString){
return fastDateParse.apply(null, isoDateString.split(/\D/));
}
})();
Date.fromISOString = (function(){
var tzoffset = (new Date).getTimezoneOffset();
function fastDateParse(y, m, d, h, i, s, ms){ // this -> tz
return new Date(y, m - 1, d, h || 0, +(i || 0) - this, s || 0, ms || 0);
}
// result function
return function(isoDateString){
var tz = isoDateString.substr(10).match(/([\-\+])(\d{1,2}):?(\d{1,2})?/) || 0;
if (tz)
tz = tzoffset + (tz[1] == '-' ? -1 : 1) * (tz[3] != null ? +tz[2] * 60 + (+tz[3]) : +tz[2]);
return fastDateParse.apply(tz || 0, isoDateString.split(/\D/));
}
})();
如果需要使用时区进行解析,请使用以下命令:
Date.fromISOString = (function(){
function fastDateParse(y, m, d, h, i, s, ms){
return new Date(y, m - 1, d, h || 0, i || 0, s || 0, ms || 0);
}
// result function
return function(isoDateString){
return fastDateParse.apply(null, isoDateString.split(/\D/));
}
})();
Date.fromISOString = (function(){
var tzoffset = (new Date).getTimezoneOffset();
function fastDateParse(y, m, d, h, i, s, ms){ // this -> tz
return new Date(y, m - 1, d, h || 0, +(i || 0) - this, s || 0, ms || 0);
}
// result function
return function(isoDateString){
var tz = isoDateString.substr(10).match(/([\-\+])(\d{1,2}):?(\d{1,2})?/) || 0;
if (tz)
tz = tzoffset + (tz[1] == '-' ? -1 : 1) * (tz[3] != null ? +tz[2] * 60 + (+tz[3]) : +tz[2]);
return fastDateParse.apply(tz || 0, isoDateString.split(/\D/));
}
})();
日期的正确形式:
Date.fromISOString('2011-06-01');
Date.fromISOString('2011-06-01T00:00:00');
Date.fromISOString('2011-06-01T00:00:00Z');
Date.fromISOString('2011-06-01T00:00:00+30');
Date.fromISOString('2011-06-01T00:00:00-30');
Date.fromISOString('2011-06-01T00:00:00+0530');
Date.fromISOString('2011-06-01T00:00:00-0530');
Date.fromISOString('2011-06-01T00:00:00+05:30');
Date.fromISOString('2011-06-01T00:00:00-05:30');
// Your example valid as well.
Date.fromISOString("2010-11-30T08:32:22+0000")
我发现了类似于日期的大小写。fromISOString('2011-06-01T00:00:00Z')创建的日期由时区偏移,因此只有当您的计算机处于GMT时,这项功能才能正常工作。下面是我为解决这一问题所做的更改 要从任何给定的ISO字符串中获取正确的日期,您需要调整本地时区,即使给定的条目是GMT 以下是您可以另存为.html文件并在计算机上测试的工作示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en_US" xml:lang="en_US">
<head>
<title>ISO Dates String to Date</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" language="JavaScript">
// Modified from: http://stackoverflow.com/questions/4450837/javascript-string-to-date-php-iso-string-format
// Thank you Roman Dvornov
Date.fromISOString = (function(){
var tzoffset = (new Date).getTimezoneOffset();
function fastDateParse(y, m, d, h, i, s, ms){ // this -> tz
return new Date(y, m - 1, d, h || 0, +(i || 0) - this, s || 0, ms || 0);
}
// result function
return function(isoDateString){
var tz = isoDateString.substr(10).match(/([\-\+])(\d{1,2}):?(\d{1,2})?/) || 0;
if (tz) {
tz = tzoffset + (tz[1] == '-' ? -1 : 1) * (tz[3] != null ? +tz[2] * 60 + (+tz[3]) : +tz[2]);
} else {
tz = tzoffset;
}
return fastDateParse.apply(tz || 0, isoDateString.split(/\D/));
}
})();
function checkDate() {
showDateIso($('#IsoStringInput').val());
}
function dates() {
showDateIso('2011-06-01');
showDateIso('2011-06-01T00:00:00');
showDateIso('2011-06-01T00:00:00Z');
showDateIso('2011-06-01T00:00:00+30');
showDateIso('2011-06-01T00:00:00-30');
showDateIso('2011-06-01T00:00:00+0530');
showDateIso('2011-06-01T00:00:00-0530');
showDateIso('2011-06-01T00:00:00+05:30');
showDateIso('2011-06-01T00:00:00-05:30');
}
function showDateIso(isoString) {
var $tr = $('<tr/>').prependTo($('#DatesTable').find('tbody'));
$('<td/>').appendTo($tr).text(isoString);
var isoDate = Date.fromISOString(isoString);
$('<td/>').appendTo($tr).text(isoDate);
var now = new Date();
$('<td/>').appendTo($tr).text(now);
$('<td/>').appendTo($tr).text(showTimeDiff(now.getTime() - isoDate.getTime()));
$tr.fadeOut(100).fadeIn(1400);
}
var ONE_YEAR_MS = 31536000000;
var ONE_WEEK_MS = 604800000;
var ONE_DAY_MS = 86400000;
var ONE_HOUR_MS = 3600000;
var ONE_MINUTE_MS = 60000;
function showTimeDiff(timeMs) {
var result = '';
if (typeof(timeMs) !== 'undefined') {
var years = 0;
while (timeMs >= ONE_YEAR_MS) {
years = years + 1;
timeMs = timeMs - ONE_YEAR_MS;
}
if (years > 0) {
result = result + years + ((weeks === 1) ? ' year ' : ' years ');
}
var weeks = 0;
while (timeMs >= ONE_WEEK_MS) {
weeks = weeks + 1;
timeMs = timeMs - ONE_WEEK_MS;
}
if (weeks > 0) {
result = result + weeks + ((weeks === 1) ? ' week ' : ' weeks ');
}
var days = 0;
while (timeMs >= ONE_DAY_MS) {
days = days + 1;
timeMs = timeMs - ONE_DAY_MS;
}
if (days > 0) {
result = result + days + ((days === 1) ? ' day ' : ' days ');
}
var hours = 0;
while (timeMs >= ONE_HOUR_MS) {
hours = hours + 1;
timeMs = timeMs - ONE_HOUR_MS;
}
var minutes = 0;
while (timeMs >= ONE_MINUTE_MS) {
minutes = minutes + 1;
timeMs = timeMs - ONE_MINUTE_MS;
}
// Break down to seconds
var seconds = parseInt(timeMs / 1000, 10);
if (hours > 0) {
result = result + hours + ':' + pad(minutes, 2) + ':' + pad(seconds, 2);
} else if (minutes > 0) {
result = result + minutes + ':' + pad(seconds, 2);
} else if (seconds > 0) {
result = result + seconds + ' sec';
}
}
return result;
}
function pad(number, len) {
var result = '';
if (!isNaN(number)) {
result = '' + number;
while (result.length < len) {
result = '0' + result;
}
}
return result;
}
</script>
</head>
<body>
<div>
<label>ISO String:</label>
<input id="IsoStringInput" type="text" value="" style="width: 300px;"/>
</div>
<button type="button" onclick="checkDate();">Check Entered Date</button>
<button type="button" onclick="dates();">ISO for June 01, 2011</button>
<table id="DatesTable">
<thead>
<th>ISO String</th>
<th>Date Printed <span style="color: #888888;">(Local Timezone)</span></th>
<th>Now</th>
<th>Now - ISO <span style="color: #888888;">(minutes)</span></th>
</thead>
<tbody>
</tbody>
</table>
</body>
</html>
ISO日期字符串到日期
//修改自:http://stackoverflow.com/questions/4450837/javascript-string-to-date-php-iso-string-format
//谢谢罗曼·德沃诺夫
Date.fromISOString=(函数(){
var tzoffset=(新日期).getTimezoneOffset();
函数fastDateParse(y,m,d,h,i,s,ms){//this->tz
返回新日期(y,m-1,d,h | | 0,+(i | | 0)-此,s | | 0,ms | | 0);
}
//结果函数
返回函数(isoDateString){
var tz=isoDateString.substr(10).match(/([\-\+])(\d{1,2}):?(\d{1,2})?/)|0;
如果(tz){
tz=tzoffset+(tz[1]='-'?-1:1)*(tz[3]!=null?+tz[2]*60+(+tz[3]):+tz[2]);
}否则{
tz=tzoffset;
}
返回fastDateParse.apply(tz | | 0,isoDateString.split(/\D/);
}
})();
函数checkDate(){
showDateIso($('#IsoStringInput').val());
}
功能日期(){
showDateIso('2011-06-01');
showDateIso('2011-06-01T00:00:00');
showDateIso('2011-06-01T00:00:00Z');
showDateIso('2011-06-01T00:00:00+30');
showDateIso('2011-06-01T00:00:00-30');
showDateIso('2011-06-01T00:00:00+0530');
showDateIso('2011-06-01T00:00:00-0530');
showDateIso('2011-06-01T00:00:00+05:30');
showDateIso('2011-06-01T00:00:00-05:30');
}
函数showDateIso(isoString){
var$tr=$('').prependTo($('#DatesTable').find('tbody');
$('').appendTo($tr).text(isoString);
var isoDate=Date.fromISOString(isoString);
$('').appendTo($tr).text(isoDate);
var now=新日期();
$('').appendTo($tr).text(现在);
$(“”).appendTo($tr).text(showTimeDiff(now.getTime()-isoDate.getTime());
$tr.fadeOut(100)。fadeIn(1400);
}
一年风险值=31536000000;
一周风险值=604800000;
var一天=86400000;
var一小时=3600000;
var一分钟=60000;
函数showTimeDiff(timeMs){
var结果=“”;
if(typeof(timeMs)!=‘未定义’){
var年数=0;
而(timeMs>=一年){
年=年+1;
timeMs=timeMs-一年;
}
如果(年数>0){
结果=结果+年+((周===1)‘年’:‘年’);
}
var周=0;
而(timeMs>=一周){
周=周+1;
timeMs=timeMs-一周;
}
如果(周数>0){
结果=结果+周+((周===1)?“周”:“周”);
}
风险值天数=0;
while(timeMs>=一天){
天数=天数+1;
timeMs=timeMs-一天;
}
如果(天数>0){
结果=结果+天数+((天数===1)?“天”:“天”);
}
var小时=0;
而(timeMs>=一小时\u MS){
小时=小时+1;
timeMs=timeMs-一小时;
}
var分钟=0;
而(timeMs>=一分钟){
分钟=分钟+1;
timeMs=timeMs-一分钟;
}
//分秒
var秒=parseInt(timeMs/1000,10);
如果(小时数>0){
结果=结果+小时+':'+键盘(分钟,2)+':'+键盘(秒,2);
}否则,如果(分钟>0){
结果=结果+分钟+':'+键盘(秒,2);
}否则,如果(秒>0){
结果=结果+秒+秒;
}
}
返回结果;