我在Angular 6前端中工作,并从另一个没有时区的系统时间戳(C#后端,DateTime)接收。我怀疑javascript会自动将本地时区添加到Date对象。
示例:
从后端接收:2018-10-15T07:53:00.000Z
控制台记录时:console.log(timestamp) // Mon Oct 15 2018 09:53:00 GMT+0200
我正在使用moment.js,并且已经尝试过moment.utc()
和moment(DATE).utc()
。但是它仍然添加了本地时区,特别是因为我必须将我的矩对象重新转换为Date
类型的.toDate()
。
我该如何解决时区差异并找回可用的utc日期或与接收到的结构相同?
答案 0 :(得分:1)
尝试根据需要设置使用格式。
let str = '2018-10-15T07:53:00.000Z';
let moment = moment(str).utcOffset(str)
console.log(moment.format('DD/MM/YYYY HH:mm'))
<script src="https://momentjs.com/downloads/moment.js"></script>
第二个片段(使用字符串中的日期对象)
let str = '2018-10-15T07:53:00.000Z';
let moment = moment(str).utcOffset(str);
console.log(moment.toDate())
<script src="https://momentjs.com/downloads/moment.js"></script>
答案 1 :(得分:1)
您输入的内容是UTC,将被正确解析。 Javascript日期没有时区的概念!本地时区是通过静态方法应用于序列化(Date.toString()
,Date.toDateString()
等)的(Console.log(Date)使用Date.toString()
。)
使用Date.toLocaleString([],{timeZone:"UTC"})
。强制使用UTC,您将在输出中看到与输入相同的时间。更详细的信息是here:-)
它在这里工作:
console.log(new Date('2018-10-15T07:53:00.000Z').toLocaleString([],{timeZone:'UTC'}))