λ¬Έμ μ λν μ€λͺ :
κ° λ μ§κ° μ΄μ λ μ§λ³΄λ€ 1 μΌ νμΈ (μκ° λ μ§ λ°°μ΄)μ λ μ§ λ²μλ₯Ό λ§λ€λ €κ³ ν©λλ€. μ΄λ λͺ¨λ μ¬μ©μμκ² μμλλ‘ μλνμ§λ§ UIμμ μ€λ³΅ λ λ μ§λ₯Όλ³΄κ³ μλ λ―Έκ΅ / μ°ν°μκ³ μκ°λμ μ¬μ©μμ λν λ²κ·Έ λ³΄κ³ μλ₯Ό λ°μμ΅λλ€. λ΄κ° μμ μ°¨λ¦° κ²μ νΉμ λ μ§μ 1 μΌμ μΆκ°νλ©΄ μ€μ λ‘λ 23 μκ° λ§ μΆκ°λλ€λ κ²μ λλ€.
μ λ μ§μ 8/11/2018 00:00:00
1 μΌ κ° μ¦κ° μκ°μ μΆκ° μλ©λ¦¬μΉ΄ / μ°ν°μκ³ μκ°λμ, 8/11/2018 23:00:00
λμ 8/12/2018 00:00:00
.
λ¬Έμλ DSTλ₯Ό κ°λ‘ μ§λ¬ _ μΌμ μ¬μ©νλ λμ _ μ΄λν λ μκ°μ 보쑴ν΄μΌνλ€κ³ μ€λͺ νμ§λ§ μ¬κΈ°μλ μ¬μ€μ΄ μλ κ² κ°μ΅λλ€.
μΌκ΄ μ μ½ μκ°μ μ΄κ³Όνλ μκ°μ μΆκ° ν λ μΌλμ λμ΄μΌ ν νΉλ³ν κ³ λ € μ¬νλ μμ΅λλ€. λ , μ, μ£Ό λλ μΌμ μΆκ°νλ κ²½μ° μλ μκ°μ νμ μΆκ° λ μκ°κ³Ό μΌμΉν©λλ€.
// This code is from moment.js docs https://momentjs.com/docs/#/manipulating/add/
var m = moment(new Date(2011, 2, 12, 5, 0, 0)); // the day before DST in the US
m.hours(); // 5
m.add(1, 'days').hours(); // 5
μ¬ν λ¨κ³
λ€μ μ½λμμ μ¬μ©λλ μκ°λλ μμ μ DST κ·μΉμ λλ€. μ΄ κ·μΉμ΄ μ μ©λκΈ° μ λ μμ μ λ μ§κ° μμ΅λλ€.μ΄ λ μ§μ 1 μΌμ μΆκ°νμΌλ©° λ€μ λ μμ / 0 μκ° (μκ°μ μ μ§λμ΄μΌ ν¨)μ΄ λ κ²μΌλ‘ μμνμ§λ§ μ€μ λ‘λ 23 μκ°.
fmt = d => d.format() + ' ' + d.tz()
x = moment.tz(new Date('08/11/2018 00:00:00'), 'America/Santiago');
fmt(x); // "2018-08-11T00:00:00-04:00 America/Santiago"
fmt(x.clone().add(1, 'day')); // "2018-08-11T23:00:00-04:00 America/Santiago" - offset unchanged, added 23 hours not 1 day
fmt(x.clone().add(2, 'day')); // "2018-08-13T00:00:00-03:00 America/Santiago" - original hour preserved now
μ¬κΈ°μμ 24 μκ°μ μΆκ°νλ©΄ 25 μκ°μ΄ μ¦κ°νκ³ μκ°λ μ€νμ μ΄ λ³κ²½λ κ²μ λ³Ό μ μμ΅λλ€.
fmt = d => d.format() + ' ' + d.tz()
x = moment.tz(new Date('08/11/2018 00:00:00'), 'America/Santiago');
fmt(x); // "2018-08-11T00:00:00-04:00 America/Santiago"
fmt(x.clone().add(24, 'hours')); // "2018-08-12T01:00:00-03:00 America/Santiago" - offset changed, added 25 hours
fmt(x.clone().add(48, 'hours')); // "2018-08-13T01:00:00-03:00 America/Santiago"
νκ²½:
λμμ΄ λ μμλ κΈ°ν μ 보 :
JS λ μ§ μΆλ ₯
(μ λ μ§ ()). toString ()
(μ λ μ§ ()). toLocaleString ()
(μ λ μ§ ()). getTimezoneOffset ()
navigator.userAgent
moment.version
λλ μ΄κ²μ μ λ½ / λ‘λ§ μκ°λμμ μ¬ννλ €κ³ νμ§λ§ λ€μμ μν ν μ μμμ΅λλ€.
μ λ½ ββ/ λ‘λ§-https: //www.timeanddate.com/time/change/italy/rome
2018 λ 10 μ 28 μΌ-μΌκ΄ μ μ½ μκ° μ’ λ£
νμ§ μΌκ΄ μ μ½ μκ°μ΄ 곧 λλ¬ ν λ
2018 λ 10 μ 28 μΌ μΌμμΌ μ€μ 3:00:00 μκ³κ° 1 μκ° λ€λ‘ λ°λλλ€.
λμ νμ§ νμ€μλ‘ 2018 λ 10 μ 28 μΌ μΌμμΌ μ€μ 2:00:00μ λλ€.
μ΄ μ½λμλ λ²κ·Έκ° μμ΅λλ€.
d => d.format() + ' ' + d.tz()
x = moment.tz(new Date('10/27/2018 00:00:00'), 'Europe/Rome');
fmt(x) // "2018-10-27T06:00:00+02:00 Europe/Rome"
fmt(x.clone().add(1, 'day')) // "2018-10-28T06:00:00+01:00 Europe/Rome" - tz offset changed, hour preserved as expected
fmt(x.clone().add(2, 'day')) // "2018-10-29T06:00:00+01:00 Europe/Rome"
TZκ° λ³νμ§ λ§ μκ°μ μΌμ νκ² μ μ§λ©λλ€.
볡μ λ¨κ³μ λ°λ₯΄λ©΄ μΆκ° λ λ μ§κ° DST μ»·μ€νμ μλ²½νκ² λλ¬νλ©΄ μ½λμ λΆμΌμΉκ°μλ κ² κ°μ΅λλ€. μ°ν°μκ³ μκ°λμμ DST κ·μΉμ μμ μ μκ³κ° ν μκ° λ€λ‘ λμκ°λ κ²μ λλ€.
μ΄ κ²½μ°λ DST μ»·μ€νκ° μμ μΈ μκ°λμ ν΄λΉνλ κ²μΌλ‘ 보μ
λλ€. μλνλ©΄ μ»·μ€νκ° μ€μ 3μμ μκ³ x
λ μ§κ° μ€μ 3μμμλ μκ°λλ‘ μ¬ν ν μ μμκΈ° λλ¬Έμ
λλ€.
μ λ½ ββ/ λ‘λ§-https: //www.timeanddate.com/time/change/italy/rome
2018 λ 10 μ 28 μΌ-μΌκ΄ μ μ½ μκ° μ’ λ£
νμ§ μΌκ΄ μ μ½ μκ°μ΄ 곧 λλ¬ ν λ
2018 λ 10 μ 28 μΌ μΌμμΌ μ€μ 3:00:00 μκ³κ° 1 μκ° λ€λ‘ λ°λλλ€.
λμ νμ§ νμ€μλ‘ 2018 λ 10 μ 28 μΌ μΌμμΌ μ€μ 2:00:00μ λλ€.
μ΄ μ½λμλ λ²κ·Έκ° μμ΅λλ€.
fmt = d => d.format() + ' ' + d.tz()
x = moment.tz(new Date('October 27, 2018 03:00:00'), 'Europe/Rome');
fmt(x); // "2018-10-27T09:00:00+02:00 Europe/Rome"
fmt(x.clone().add(1, 'days')) // "2018-10-28T09:00:00+01:00 Europe/Rome" - tz offset changed, hour preserved as expected
fmt(x.clone().add(2, 'days')) // "2018-10-29T09:00:00+01:00 Europe/Rome"
μ΄ λ²κ·Έλ DST λ§κ° μκ°μ΄ μμ μΈ μκ°λμλ§ μ‘΄μ¬νλ©° λ μ§κ° λ§κ° μκ°μ μ νν λμ°©νλλ‘νλ λ μ§μ μκ°μ μΆκ°νκ³ μμμ νμΈν μμμμ΅λλ€.
λ―Έκ΅ / Punta_Arenas - https://www.timeanddate.com/time/zone/chile/punta-arenas
2016 λ
μλμ΄ μκ°λλ μμ μ λ§κ°λμμ΅λλ€.
μ΄ μ½λμλ λ²κ·Έκ°μλ κ² κ°μ΅λλ€. κ° μ€ λ€μ μ£Όμ보기
fmt = d => d.format() + ' ' + d.tz()
x = moment.tz(new Date('08/13/2016 00:00:00'), 'America/Punta_Arenas')
fmt(x); // "2016-08-13T00:00:00-04:00 America/Punta_Arenas"
fmt(x.clone().add(1, 'days')); // "2016-08-13T23:00:00-04:00 America/Punta_Arenas" - 23 hours added, not 1 day, no tz offset change
fmt(x.clone().add(2, 'days')); // "2016-08-15T00:00:00-03:00 America/Punta_Arenas"
λμΌν μ’ λ₯μ μκ°λ (μμ DST)λ₯Ό λΊ λ μ μ¬ν λ¬Έμ λ‘ λ³΄μ΄λ κ²μ λ°κ²¬νμ΅λλ€.
DST μννΈμμ λ μ§λ₯Ό μ νν λΉΌλ©΄ ν΄λΉ λ μ§μλ§ μκ°μ΄ μ μ§λμ§ μκ³ λ μ§κ° λ³κ²½λ©λλ€.
fmt = d => d.format() + ' ' + d.tz()
x = moment.tz(new Date('08/13/2018 23:00:00'), 'America/Santiago');
fmt(x); // "2018-08-14T00:00:00-03:00 America/Santiago"
fmt(x.clone().subtract(1, 'days')); // "2018-08-13T00:00:00-03:00 America/Santiago"
fmt(x.clone().subtract(2, 'days')); // "2018-08-12T01:00:00-03:00 America/Santiago" - hour not preserved, but date changed
fmt(x.clone().subtract(3, 'days')); // "2018-08-11T00:00:00-04:00 America/Santiago" - original hour preserved now
μκ°λκ° America/Asuncion
μ¬μ©μλ‘λΆν°μ΄ λ¬Έμ μ λν λ λ€λ₯Έ μ κ³ λ₯Ό λ°μμ΅λλ€.
μ ν리μΌμ΄μ μμ λ²κ·Έλ₯Ό μμ±νλ ν¨μλ λ€μκ³Ό κ°μ΅λλ€.
function generateDayRange(start, end) {
const days = [];
let current = start.clone();
while (current <= end) {
days.push(current.clone());
current = current.add(1, 'days');
}
return days;
}
μ΄ ν¨μλ₯Ό μ¬μ©ν λ ν루μ μμμΌ μΈ μμ λ μ§μ μκ°μ΄ κ·Έλ€μ§ μ€μνμ§ μμ μ’ λ£ λ μ§λ₯Ό μ λ¬ν©λλ€.
generateDayRange(startDate.clone().startOf('week'), startDate.clone().endOf('week'));
generateDayRange(getAppDate(startDate), getAppDate(endDate));
generateDayRange(startRange, startRange.clone().add(27, 'days'));
λ¬Έμ λ μκ° λ μ§ λ°°μ΄μ μ€λ³΅ λ λ μ§κ° ν¬ν¨λμ΄ μ ν리μΌμ΄μ μ UIμ λ°μλλ€λ κ²μ λλ€ (λ¬λ ₯μλ μ€λ³΅ λ λ μ§κ° μμ).
λ΄ λ ν° μ°λ €λ λΌμ΄λΈλ¬λ¦¬κ° μμλλ‘ μλνμ§ μκΈ° λλ¬Έμ κ°μ§ λ λ°μ΄ν° μμ€, μλͺ»λ μμ² λ±κ³Ό κ°μ λ―Έλ¬ν λ¬Έμ κ° λμ λμ§ μμ μ μλ€λ κ²μ λλ€.
νΈκΈ°μ¬ λ§μ λ μλ€μ΄μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλλ‘ μ½λ ν λ±μμ μΌλ ¨μ ν μ€νΈλ₯Ό μν ν κ²μ λλ€.
κ΄λ ¨ λ¬Έμ # 4785μλ μ½λμ λν λ§ν¬κ° μμ΅λλ€.
μκ° μ https://runkit.com/embed/1r62d83amq7x
κ·Έλ¬λ luxonμ μ΄κ²μ μ¬λ°λ₯΄κ² μ²λ¦¬ν©λλ€.
https://runkit.com/embed/t49achvensqf
μ΅κ·Ό DST λ³κ²½ μ¬νμ΄ μλ€λ κ²μ μκ³ μμΌλ―λ‘ νμ¬ develop
(μΆμλμ§ μμ)μμλ μ½λλ₯Ό νμΈν΄μΌν©λλ€. λλ λ€μ 릴리μ€κΉμ§ κΈ°λ€λ Έλ€κ° μ¬μ ν λμΌν μ§ νμΈν μ μμ΅λλ€.
μ¬κΈ°μ λμμ μκ° μκ°λ v0.5.4μ v0.5.26 μ¬μ΄μμ λ³κ²½λ κ²μ²λΌ 보μ
λλ€.
μ΄μ λ²μ μμλ '2018-08-11'μ 1 μΌμ μΆκ°νλ©΄ κ°μ λ μ€ν 11 μκ°λ©λλ€.
μ λ²μ μμλ μμ μ '2018-08-12'λ₯Ό μ 곡ν©λλ€. κ·Έλ¬λμ΄ μκ°μ μ€μ λ‘ μ‘΄μ¬νμ§ μμΌλ©° 1 λΆμ μΆκ°νλ©΄ 1 μκ°μ΄ κ±°μ¬λ¬ μ¬λΌκ°λλ€. κ·Έλ¬λμ΄ DST λ³κ²½μ ββ1 μκ°μ μΆκ°ν΄μΌνμ΅λλ€.
μ΄μ λ²μ μμ΄ λ¬Έμ μ μ€λͺ
λλλ‘ μλν©λλ€.
https://jsfiddle.net/eqyvuxht/1/
μ λ²μ , λ³κ²½λ λμ,νμ§λ§ μ¬μ ν μλͺ»λ κ² κ°μμ?
https://jsfiddle.net/0h6atn4b/4/
ν΄κ²° λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
function switchZone(m, zone) {
let arr = [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second()];
if(zone) {
return moment.tz(arr, zone);
}
return moment(arr);
}
function safeAddDays(m, days) {
let oldZone = m.tz();
let utc = switchZone(m, 'UTC');
utc.add(days, 'days');
return switchZone(utc, oldZone);
}
μ΄λ² λ¬ (2019 λ
9 μ)μ λ μ§ μ νκΈ°λ₯Ό μ¬μ©νλ Santiago μ¬μ©μμκ² λ μ§κ° 1, 2, 3, 4, 5, 6, 7, 7, 7, 7 μΈ λ¬λ ₯μ΄ νμλλ λμΌν λ¬Έμ κ° λ°μν©λλ€. 9 μ ... λ΄λΆμ μΌλ‘ .add(1, 'days')
λ μ¬μ©νκ³ μμ΅λλ€. κ·ΈλκΉμ§ μμ νμ§ μμΌλ©΄ λ΄λ
μ 2020 λ
9 μμ λ€μ λ°μν κ²μ
λλ€.
@mblandfo ν΄κ²° λ°©λ²λ μ°λ¦¬λ₯Ό μν΄ νΈλ¦μ μννλ κ² κ°μ΅λλ€. κ°μ¬!
κ°μ₯ μ μ©ν λκΈ
μ¬κΈ°μ λμμ μκ° μκ°λ v0.5.4μ v0.5.26 μ¬μ΄μμ λ³κ²½λ κ²μ²λΌ 보μ λλ€.
μ΄μ λ²μ μμλ '2018-08-11'μ 1 μΌμ μΆκ°νλ©΄ κ°μ λ μ€ν 11 μκ°λ©λλ€.
μ λ²μ μμλ μμ μ '2018-08-12'λ₯Ό μ 곡ν©λλ€. κ·Έλ¬λμ΄ μκ°μ μ€μ λ‘ μ‘΄μ¬νμ§ μμΌλ©° 1 λΆμ μΆκ°νλ©΄ 1 μκ°μ΄ κ±°μ¬λ¬ μ¬λΌκ°λλ€. κ·Έλ¬λμ΄ DST λ³κ²½μ ββ1 μκ°μ μΆκ°ν΄μΌνμ΅λλ€.
μ΄μ λ²μ μμ΄ λ¬Έμ μ μ€λͺ λλλ‘ μλν©λλ€.
https://jsfiddle.net/eqyvuxht/1/
μ λ²μ , λ³κ²½λ λμ,νμ§λ§ μ¬μ ν μλͺ»λ κ² κ°μμ?
https://jsfiddle.net/0h6atn4b/4/
ν΄κ²° λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.