Javascript日期格式,如ISO,但为本地格式
如何像ISO格式一样格式化javascript日期,但要使用本地时间 使用Javascript日期格式,如ISO,但为本地格式,javascript,Javascript,如何像ISO格式一样格式化javascript日期,但要使用本地时间 使用myDate.toISOString()我得到的时间是:“2012-09-13T19:12:23.826Z” 但是这里是22:13,那么如何在上面的格式中包含时区呢 我最后做了 pad=function(e,t,n){n=n||"0",t=t||2;while((""+e).length<t)e=n+e;return e} c = new Date() c.getFullYear()+"-"+pad(c.getMo
myDate.toISOString()
我得到的时间是:“2012-09-13T19:12:23.826Z”
但是这里是22:13,那么如何在上面的格式中包含时区呢
我最后做了
pad=function(e,t,n){n=n||"0",t=t||2;while((""+e).length<t)e=n+e;return e}
c = new Date()
c.getFullYear()+"-"+pad(c.getMonth()+1)+"-"+pad(c.getDate()-5)+"T"+c.toLocaleTimeString().replace(/\D/g,':')+"."+pad(c.getMilliseconds(),3)
pad=function(e,t,n){n=n | | |“0”,t=t | | 2;while(“”+e).lengthAFAIK你不能在javascript中格式化日期(不使用外部库)。你最好是“自己格式化”。我的意思是:
但是有一些很好的库可以让您格式化日期!(请阅读library.getDate(“YYYY-MM-DD……);
中的“format”)
编辑:
Moment.js似乎就是您要找的东西:不需要库!对于某些Date
对象,例如t=new Date()
- 将本地时区偏移从分钟转换为毫秒
z=t.getTimezoneOffset()*60*1000
- 从t中减去偏移量
tLocal=t-z
- 创建移位日期对象
tLocal=新日期(tLocal)
- 转换为ISO格式字符串
iso=tLocal.toISOString()
- 删除毫秒和区域
iso=iso.slice(0,19)
- 将丑陋的“T”替换为空格
iso=iso.替换('T','')
结果是一个很好的ISO ish格式的日期时间字符串,如本地时区中的“2018-08-01 22:45:50”。为了方便起见,我使用了Denis Howe所说的以下现成功能
还有一个修正:在原始答案中,t-z不起作用,因为t是日期,而不是毫秒
function dateToISOLikeButLocal(date) {
const offsetMs = date.getTimezoneOffset() * 60 * 1000;
const msLocal = date.getTime() - offsetMs;
const dateLocal = new Date(msLocal);
const iso = dateLocal.toISOString();
const isoLocal = iso.slice(0, 19);
return isoLocal;
}
通过此操作,我获得了作为URL参数所需的字符串类型:
"2018-11-16T12:23:50"
我不太明白你需要哪一天
但我认为你需要
const ISOLocaleString = d => {
const pad = n => n < 10 ? '0'+n : n;
return d.getFullYear()+'-'
+ pad(d.getMonth()+1)+'-'
+ pad(d.getDate())+'T'
+ pad(d.getHours())+':'
+ pad(d.getMinutes())+':'
+ pad(d.getSeconds())+'Z'
}
const isolocalString=d=>{
常数pad=n=>n<10?'0'+n:n;
返回d.getFullYear()+'-'
+pad(d.getMonth()+1)+'-'
+pad(d.getDate())+'T'
+pad(d.getHours())+':'
+pad(d.getMinutes())+':'
+pad(d.getSeconds())+'Z'
}
或
const ISOUTCLocaleString=d=>{
const pad=n=>n另一种方法是在日期对象上定义原型:
Date.prototype.toLocaleISOString = function() {
const zOffsetMs = this.getTimezoneOffset() * 60 * 1000;
const localTimeMs = this - zOffsetMs;
const date = new Date(localTimeMs);
const utcOffsetHr = this.getTimezoneOffset() / 60;
const utcOffsetSign = utcOffsetHr <= 0 ? '+' : '-';
const utcOffsetString = utcOffsetSign + (utcOffsetHr.toString.length == 1 ? `0${utcOffsetHr}` : `${utcOffsetHr}`) + ':00';
return date.toISOString().replace('Z', utcOffsetString);
};
它只是一种格式化日期的方法,因此可以应用于任何时区
您是否尝试过对象的toLocaleString
方法的timeZone
选项
有示例的答案。没有直接的方法。但是,您可以使用toLocaleString
创建一个字符串,您可以轻松解析该字符串,使其成为ISO字符串
这适用于以下节点:
getLocalIsoTime(时间、时区){
const local=time.tolocalString(“en-US”,{时区:时区,小时12:false,年:“数字”,月:“2位”,日:“2位”,小时:“2位”,分钟:“2位”,秒:“2位”});
返回`${local.substr(6,4)}-${local.substr(0,2)}-${local.substr(3,2)}T${local.substr(12,8)}`;
}
更简单的版本适用于node 15+和大多数现代浏览器:
getLocalIsoTime(时间、时区){
返回时间.tolocalString(“en-CA”,{timeZone:timeZone,hour12:false}).replace(/,/,“T”);
}
有点老套,但可以利用瑞典使用非常接近ISO的格式,一行完成:
// Returns a string like 2021-01-17T01:59:57
function dateToISOButLocal(date) {
return date.toLocaleString('sv').replace(' ', 'T');
}
以及.getMonth()返回的月份
si没有填充,所以我想我也需要一个库来填充它-看起来很费劲!是的,确实如此。这是一个很大的工作,这就是为什么我建议使用矩.js或其他库。小更正:t-z
在原始答案中确实有效,因为它相当于getTime
,所以任何隐式使用该函数的东西都会遇到hod,就像减法和一元数+
(例如+新日期(2020,0,1)
)一样,将使用毫秒数。好的-我仍然在使用该代码,我想,可能会在某个时候尝试这种方法。这种方法非常有效。我确实必须将切片更改为(0,16)
以适应
,由于某些原因,它需要时分而无秒。请注意,如果本地时区在UTC之后,偏移量为正,如果在UTC之前,偏移量为负。这就是为什么您必须减去它,而不是添加它。只需添加:如果您想再次读取finaliso
作为日期对象:newD=new Date(Date.parse(iso));
@OmSao在该表达式中使用Date.parse是多余的,新日期(iso);
将产生相同的结果。您所完成的操作不包括时区偏移。
Date.prototype.toLocaleISOString = function() {
const zOffsetMs = this.getTimezoneOffset() * 60 * 1000;
const localTimeMs = this - zOffsetMs;
const date = new Date(localTimeMs);
const utcOffsetHr = this.getTimezoneOffset() / 60;
const utcOffsetSign = utcOffsetHr <= 0 ? '+' : '-';
const utcOffsetString = utcOffsetSign + (utcOffsetHr.toString.length == 1 ? `0${utcOffsetHr}` : `${utcOffsetHr}`) + ':00';
return date.toISOString().replace('Z', utcOffsetString);
};
const date = new Date();
console.log(date.toLocaleISOString());
// Output: 2020-08-04T14:52:38.613-07:00
// Returns a string like 2021-01-17T01:59:57
function dateToISOButLocal(date) {
return date.toLocaleString('sv').replace(' ', 'T');
}