Одна секунда = 1 год для 31.12.2017 с использованием Utilities.formatDate

Иметь любопытные результаты преобразования даты с помощью Utilities.formatDate()

function test_date_conversion_1() {
    var in_d_str = "12/31/2017"
    var new_d = Utilities.formatDate(new Date(in_d_str), "EET", "MM/dd/YYYY")
    return new_d
} 
// new_d = "12/31/2018"  2018?!

Я пытался разработать патч и получить неожиданные результаты для этой функции

function test_date_conversion(offset) {
    //offset = 1
    var in_d_str = "12/31/2017"
    var in_d = new Date(in_d_str)
    var in_d_epoch = in_d.getTime()
    var in_d_epoch_dep_1 = in_d_epoch+offset
    var in_d_d_dep_1 = new Date(in_d_epoch_dep_1)
    var new_d = Utilities.formatDate(in_d_d_dep_1, "EET", "MM/dd/YYYY")
}

если смещение = 1, то new_d = "31/12/2018"

если смещение = (-1), то new_d = "30.12.2017"

так 1 миллисекунда = 1 год?

EET = GMT + 2 = часовой пояс скрипта

часовой пояс рабочего листа = GMT+3

из отладчика я заметил, что дата испорчена Utilities.formatDate()

Я сработал +/-1 ч, +/-1 ч +/-1 с смещения и до сих пор не могу получить только 31.12.2017 от 31.12.2017.

Я залатал вот так

if (new_d == "12/31/2018")
    new_d = "12/31/2017";

но ищите твердый раствор. спасибо за ответ заранее.

1 ответ

Решение

Третий параметр formatDate(date, timeZone, format) является

формат в соответствии со спецификацией SimpleDateFormat

Для SimpleDateFormat вы используете Y на неделю года и y на год. С недели 12/31/2017 первая неделя 2018 года, будет отображаться как 2018 год.

Вместо того, чтобы использовать "MM/dd/YYYY" использовать "MM/dd/yyyy",

Другие вопросы по тегам