可以说我在Javascript中具有以下时区感知Date
对象:
var date1 = new Date("2019-07-02T07:30:00-05:00");
var date2 = new Date("2020-08-05T00:00:00-05:00");
合并这两者的最佳方法是什么,这样我将date1
的时间和date2
的日期保持一致,得出:
new Date("2020-08-05T07:30:00-05:00");
我尝试过:
date1.setDate(date2.getDate());
date1.setMonth(date2.getMonth());
date1.setYear(date2.getYear());
为date1
正确设置了日期和月份,但是在上面的示例输入中,年份未正确设置为“ 120”。
答案 0 :(得分:1)
几件事:
function myFunction() {
var position = $(this).scrollTop()
var class_pos = $('.white, .black').filter(function(){ return position >= $(this).position().top})
// console.log(class_pos)
if ($(class_pos[class_pos.length - 1]).hasClass('white')){
logoSwap(0);
} else {
logoSwap(1);
}
}
对象不能识别时区。当传递带有时区偏移量的字符串(如您在此处显示的字符串)时,它们将使用该偏移量确定等效的UTC时间。最终,Date
对象中存储的唯一内容是与该UTC时间相对应的数字Unix时间戳。您可以通过Date
或.getTime()
看到它。
.valueOf()
/ getDay
用于一周中的某天,星期六(0)到星期日(6)。在每月的一天中使用setDay
/ getDate
。
setDate
/ getYear
用于两位数的年份(或者说是当前年份减去1900),因此永远不要使用。改用setYear
/ getFullYear
。
由于第一点,您无法提出要求。或至少无法在此类字符串中遇到的所有值范围。相反,您可以直接操作字符串,也可以使用Luxon或Moment之类的库。
对于您实际上想要实现的目标,我也会想一想。这两个值从何而来?为什么部分数据很重要而其他部分却被丢弃?如果两个值之间的偏移量不同,该怎么办?只有你能回答这些问题。
答案 1 :(得分:0)
直接处理ISO字符串:
const date1 = new Date("2019-07-02T07:30:00-05:00");
const date2 = new Date("2020-08-05T00:00:00-05:00");
const date3 = new Date([
date2.toISOString().split('T')[0],
'T',
date1.toISOString().split('T')[1],
].join(''));
console.log({date1, date2, date3});
顺便说一句,没有“时区感知”日期对象。触发Date(...)
后,时间就是UTC。 getTimezoneOffset
会获得当地时区与UTC的时差。