λλ datetimepicker.js λ₯Ό μ¬μ©νκ³ μμΌλ©° date
ν¨μλ moment.js κ°μ²΄λ₯Ό λ°νν©λλ€. λ‘컬 UTC μ€νμ
μΌλ‘ μνλλ©° μλ λ μ§μλ λ€λ₯Έ μ€νμ
μ΄ μμ΅λλ€.
λ΄ μλ λ μ§:
2015-10-01T15:00:00.000Z
λ μ§ μκ° μ νκΈ°μ νμνλ λ΄μ©( DD-MM HH:mm
):
01-10 15:00
λ΄κ° μ»λ κ²:
2015-10-01T15:40:00+01:00
λ΄κ° μνλ κ²:
2015-10-01T15:40:00+00:00
λ§μ§λ§μ +01 μ€νμ μ μ κ±°ν λ°©λ²μ μ μνμμμ€.
λ‘컬 UTCμ μ μ©νλ €λ©΄ μ΄λ»κ² ν΄μΌ ν©λκΉ? μ΄κ²μ 01μ μλμΌλ‘ μ κ±°νμ§ μκ³ λ κ°λ₯ν©λλ€(μ¬μ©μ μμΉμ λ°λΌ λ€λ₯Έ λ‘컬 μ€νμ μ΄ λ μ μμ).
μ΄κ²μ λ΄κ° λ μ§λ₯Ό μ»κΈ° μν΄ μ§κΈκΉμ§ κ°μ§κ³ μλ κ²μ΄μ§λ§ κ°μ μκ°μ μ μ§νμ¬ μ€νμ μ μ κ±°νλ λ°©λ²μ λͺ¨λ₯΄κ² μ΅λλ€.
var momentDate = timePicker.data("DateTimePicker").date();
console.log(momentDate.format());
//this prints 2015-10-01T15:40:00+01:00
μκ°μ μλ λ μ§λ₯Ό νμ§ μκ°λ λ μ§λ‘ νμνν©λλ€. μ¦, κΈ°κ³ μμ€ν μ΄ +08:00 μκ°λλ₯Ό μ¬μ©νλ κ²½μ° 2017-08-02 10:00:00+02:00μ 2017-08-02 16:00:00+08:00μΌλ‘ νμμ΄ μ§μ λ©λλ€.
μκ°λλ₯Ό 무μνκ³ μλ λ μ§ νμμ μ§μ νλ ν¨μλ₯Ό μμ±νμ΅λλ€.
/**
* <strong i="7">@desc</strong> use moment to format a datetime
* <strong i="8">@param</strong> string|date|timestamp datetime: the datetime to format
the given datetime can have timezone, and the timezone will be kept in the process of output datetime
i.e. formate('2017-09-08 11:24:00+08:00', 'D/M/YYYY HH:mm:ss Z') => 8/9/2017 11:24:00 +08:00, as you see, +08:00 is kept, which is different from moment default behavior
if timezone has not been given, local timezone will be used.
* <strong i="9">@param</strong> string formatter: the target format you want to get
* <strong i="10">@param</strong> string givenFormatter: moment allow developer to define your own formatter, i.e. DD/MM/YYYY HH,mm,ss which is not a statndard time format
* <strong i="11">@return</strong> string new formatted datetime string
* <strong i="12">@example</strong>:
1. format(new Date(), 'YYYY-MM-DD HH:mm:ss')
2. format(your_date, 'YYYY-MM-DD HH:mm:ss', 'DD/MM/YYYY HH,mm,ss')
*/
export function format(datetime, formatter, givenFormatter) {
let localTimezoneOffset = timezoneOffset()
let givenTimezoneOffset = moment.parseZone(datetime).utcOffset()
if (givenTimezoneOffset !== 0) {
return moment(datetime, givenFormatter).utcOffset(givenTimezoneOffset).format(formatter)
}
else {
// big problem: we do not know whether timezone has not been given or it is +00:00
// if its utc time is the same with itself, it means timezone has been given
let u = utc(datetime, 'YYYY-MM-DD HH:mm:ss')
let t = moment(datetime).parseZone(datetime).format('YYYY-MM-DD HH:mm:ss')
if (u === t) {
return moment(datetime, givenFormatter).utc().format(formatter)
}
else {
return moment(datetime).format(formatter)
}
}
}
μμ€ μ½λ: https://github.com/tangshuang/moment-format
μ΄ ν¨μλ₯Ό μ¬μ©νμ¬ λ μ§λ₯Ό νμννλ©΄ μκ° κΈ°λ³Έ νμ λ Όλ¦¬λ₯Ό 무μν©λλ€. 2017-08-02 10:00:00+02:00μ 2017/08/02 10:00:00+02:00κ³Ό κ°μ νμμ΄ λ©λλ€.
const tmp = moment(valueAsDate).utc(true)
- νμν κ²μ μκ°λλ₯Ό 무μνλ κ²μ
λλ€.
μλ₯Ό λ€μ΄ tmp.toISOString()
λ‘ μ¬μ©ν μ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
const tmp = moment(valueAsDate).utc(true)
- νμν κ²μ μκ°λλ₯Ό 무μνλ κ²μ λλ€.μλ₯Ό λ€μ΄
tmp.toISOString()
λ‘ μ¬μ©ν μ μμ΅λλ€.