如何在JavaScript中从日期中移除本地时区?

48

我想知道是否可以使用JavaScript从日期中删除时区?我以JSON格式获取datetime,现在我想将其设置回去,但它返回比我实际想要/需要的更多信息。

我现在拥有的是:

var d = new Date();
d.setTime(1432851021000);
document.write(d);

输出结果大致如下:

Thu May 28 2015 16:10:21 GMT-0600 (CST)

我希望只显示到小时,并删除GMT-0600(CST)。

我知道JavaScript会根据当前用户的时区来获取该信息,这是一个问题,因为该信息可能保存在不同的国家/地区。

我正在尝试避免使用类似以下的格式:

d.date() + "/" + d.month()...etc

有更好的解决方案吗?


为什么不使用momentjs?http://momentjs.com/ - victorkurauchi
13个回答

32

我相信d.toDateString()会输出你需要的格式。

var d = new Date();
d.setTime(1432851021000);
d.toDateString(); // outputs to "Thu May 28 2015"
d.toGMTString(); //outputs to "Thu, 28 May 2015 22:10:21 GMT"

甚至可以使用d.toLocaleString() "2015年5月28日下午6点10分21秒"

有许多可用于Date()的方法。


1
d.toLocaleString() 输出为 "2015年5月28日下午6:10:21" - gautsch
抱歉,我猜你想要的是 d.toGMTString(); - gautsch
toLocateString的效果很好,有没有办法指定格式?比如DD-MM-YY? - jpganz18
toLocaleString接受不同的格式选项。我建议在MDN上进行查看。这将输出您想要的内容,例如 d.toLocaleString("en-GB"); - gautsch
啊!谢谢。toDateString对我很有帮助。我必须从HTML5日期选择器中用斜杠替换破折号,但这没什么好担心的。var d = new Date($('#Dances_Moderated_SingleDate').val().replace(/-/g, '/')); retVal= d.toDateString(); - JustJohn

13

使用 moment

moment().utcOffset(0, true).format()

从Javascript Date开始

var date = new Date();
Tue Sep 06 2021 00:00:00 GMT+0200

var isoDate = date.toISOString()
'2021-09-05T22:00:00.000Z'

var clearUTCDate = moment(date).utcOffset(0, true).format() 
'2021-09-06T00:00:00Z'

12

因为您想要的部分长度始终固定,所以您可以使用:

d.toString().slice(0, 24)

jsfiddle


谢谢,但是如果有人拥有另一个时区而不是GMT会发生什么?或者是-12? - jpganz18
如果时区不同,那么期望的输出是什么?您想将时间转换为特定的时区吗?还是只有在满足某些条件时才显示它?否则,切片操作将仅删除最后一个时区位。 - Samurai

2

使用moment.js

var d = new Date();
d.setTime(1432851021000);

var newdate = moment(d);

alert(newdate.format("MMM DD/MM/YYYY HH:mm:ss "));

http://jsfiddle.net/vynvepak/


1
使用Luxon,以下示例代码获取当前日期和时间,并以ISO标准格式使其与时区无关。

const { DateTime, ToISOTimeOptions } = window.luxon;
const currentDate = new Date();

// Unspecified timezone.
console.log(
  DateTime.fromJSDate(currentDate)
    .toISO(
          {includeOffset:false} // ToISOTimeOptions
    )
  );
<script src="https://cdn.jsdelivr.net/npm/luxon@2.0.2/build/global/luxon.min.js"></script>


0
var date = new Date(myUnixTimestamp*1000);
var prettyDate = date.toLocaleString();

0
我创建了一个简单的JS函数来从日期时间字符串中删除时区部分。它将会输出以下内容:
  • 2019-07-27T19:00:00.000-0700 => 2019-07-27T19:00:00.000
  • 2019-09-17T19:00:00.000+0100 => 2019-09-17T19:00:00.000

function removeTimeZonePart(dateString) {
            
             let finalDate = '';
            
             if (dateString.split('+').length > 1) {
                 let b = dateString.split('+');
            
                 finalDate = b[0];
             } else {
                 let b = dateString.split('-');
            
                  if (b.length > 1) {
                   b.pop();
                   finalDate = b.join('-');
                 }
             }

             return finalDate;

}

alert(removeTimeZonePart('2019-07-27T19:00:00.000-0700'));


0
你可以使用2个选项:
1. 使用split函数:d.split('GMT'),这将给你一个数组。
2. 获取通常的JS日期函数,如getHour和getFullYear等,以你喜欢的方式格式化结果。

感谢,第二个选项有一点棘手...特别是因为我必须检查日期是否小于10,然后添加0以使其具有正确的格式01、02,月份也是如此,需要加1,因为它返回0-11。 GMT是默认设置还是取决于计算机的配置? - jpganz18

0

正则表达式来参加派对了

// for ISO Datetime strings only

const rmvTZOffset = str => str.replace(/[+-]\d\d:\d\d$/, '')

console.log(rmvTZOffset('2023-02-22T10:18:17+00:00'))
console.log(rmvTZOffset('2024-02-22T10:18:17.7543-02:30'))

const zone = 'Europe/Lisbon'
fetch('https://worldtimeapi.org/api/timezone/' + zone)
  .then(r => r.json())
  .then(r => {
    console.log(rmvTZOffset(r.datetime))
  })


0
var x = d.toDateString().length;
var result = d.toDateString() + d.toString().substring(x,x+9);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接