如何格式化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.getMonth()+1)+"-"+pad(c.getDate()-5)+"T"+c.toLocaleTimeString().replace(/\D/g,':')+"."+pad(c.getMilliseconds(),3)
Run Code Online (Sandbox Code Playgroud)
ant*_*ont 12
为了方便起见,我采用了 Denis Howe 所说的作为现成的功能。
还有一个解决方法:在原始答案中 tz 不起作用,因为 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;
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我得到了需要作为 URL 参数的字符串类型:
"2018-11-16T12:23:50"
Run Code Online (Sandbox Code Playgroud)
All*_*ice 11
有点黑客,但可以利用瑞典使用非常接近 ISO 的格式这一事实在一行中完成:
// Returns a string like 2021-01-17T01:59:57
function dateToISOButLocal(date) {
return date.toLocaleString('sv').replace(' ', 'T');
}
Run Code Online (Sandbox Code Playgroud)
Den*_*owe 10
无需图书馆!对于某些Date物体,例如t = new Date()
将本地时区偏移量从分钟转换为毫秒
z = t.getTimezoneOffset() * 60 * 1000
从t减去偏移量
tLocal = t-z
创建移动日期对象
tLocal = new Date(tLocal)
转换为ISO格式的字符串
iso = tLocal.toISOString()
降低毫秒和区域
iso = iso.slice(0, 19)
用空格替换丑陋的“ T”
iso = iso.replace('T', ' ')
结果是一个不错的ISO格式的日期时间字符串,例如本地时区中的“ 2018-08-01 22:45:50”。
尽管这里的答案可能有效,但没有什么比简单的一句台词更好的了:
new Date(new Date().getTime() - new Date().getTimezoneOffset() * 60 * 1000).toISOString()
Run Code Online (Sandbox Code Playgroud)
我们创建一个新的 Date 实例(外部实例)。
我们给它另一个 Date 实例(以毫秒为单位),从中减去时区偏移量(也以毫秒为单位,正数或负数)。所有这些我们都格式化为 ISO
AFAIK你不能在javascript中格式化日期(不使用外部库).你能做的最好的事情就是"自己格式化".我的意思是:
var date = new Date();
var year = date.getFullYear();
var month = date......
var ISOdate = year + "-" + month + "-" + .... ;
Run Code Online (Sandbox Code Playgroud)
但是有一些好的库可以让你格式化日期!(读作"格式" library.getDate("YYYY-MM-DD.........");)
编辑:
Moment.js似乎是您正在寻找的东西:http://momentjs.com/