База данных: Дата



  • @santilo
    Может, теперь подскажешь как вычесть одну дату из другой?
    Яваскрипт это позволяет, но код вида
    [[DATE]] = new Date()
    [[N]] = [[DATE]] - [[DATE_BORN]];

    не работает..



  • Вот так сработает, "выполнить код"

    VAR_DATE = new Date()
    VAR_N = (VAR_DATE) - (VAR_DATE_BORN)
    

    При условии, что ты объявил перед этим переменную DATE_BORN, например так:

    VAR_DATE_BORN = new Date()
    


  • @Fox я тактоже делал
    Только в скобочки не занес. Возвращало null
    И сейчас возвращает ((
    В обоих переменных четко формат даты. Причем, неодинаковой. 1-я больше 2-й..



  • Ну я вот только что всё проверил.
    Тестовый проект



  • @Fox это мистика какая-то. Код работает, и у тебя и у меня в проектах. Но если DATE_BORN брать из базы, то возвращает null



  • У тебя в базе дата в каком виде? Если взять дату количеством миллисекунд, прошедших с 01.01.1970, командой

    +new Date()
    

    то из переменной работает.
    Тот же тестовый проект



  • @Fox там точно тип данных date. Единственное, что я внес его копипастом. На вид тоже самое.



  • @Fox кароче, теперь вопрос стоит не как вычесть дату, а как правильно вычесть дату из таблицы. Потому что та дата, которая получается выражением, и та дата, которая берется из таблицы - какие то разные даты.



  • 0_1493264960572_upload-5a3c67e8-d86b-4c5e-8cfe-6483cf7b2fd6
    В учебнике пишут вот так.
    var msUTC = Date.parse('2012-01-26T13:51:50.417Z');
    Вобщем, такая вот фигня. Похоже, что я чего-то не знаю.



  • Решил вот так. Две колонки типа int
    Получаю целое число дней
    [[DATE_BORN]] = new Date ()
    [[DATE_BORN]] = [[DATE_BORN]] - 0 #придумал такой ход, чтобы извлечь кол-во миллисекунд
    [[DATE_BORN]] = [[DATE_BORN]]/(10006060*24) # получаю кол-во дней
    [[DATE_BORN]] = Math.floor([[DATE_BORN]]) # превращаю в целое
    потом прописываю в базу действием изменить запись если та равна нулю

    получаю текущую дату
    [[DATE]] = new Date ()
    [[DATE]] = [[DATE]] - 0
    [[DATE]] = [[DATE]]/(1000 60 60 24) #почему то значки умножения не ставятся
    [[DATE]] = Math.floor([[DATE]])

    [[N]] = [[DATE]]-[[DATE_BORN]] #Узнаю, сколько дней прошло
    Может, кому пригодится.


  • administrators

    @Viktor Чтобы поменять время в базе нужно записать туда целое число, которое равно количеству миллисекунд с 1 января 1970 года.

    Вот примеры.

    Date.now() //Текущая дата
    Date.now() + 1000 * 60 * 5 //Текущая дата + 5 минут
    


  • @support ага, понял.



  • @support Запись даты в базу в unixtime формате это хорошо, но почему бы не возвращать в этом же формате при чтении?
    Как вообще получить дату из базы в нормальный вид типа UnixTime или Date()?

    Даты при парсинге строки из базы в виде ресурса, возвращаются в формате строки "2017-10-13T22:18:20".
    Проверил в консоле обычного браузера преобразуется в дату как надо командной:

    var date = new Date("2017-10-13T22:18:20");
    

    Но тот же самый код отказывается работать в BAS'е:
    alt text
    0_1507926157785_test.xml



  • @Geograph said in База данных: Дата:

    @support Запись даты в базу в unixtime формате это хорошо, но почему бы не возвращать в этом же формате при чтении?
    Как вообще получить дату из базы в нормальный вид типа UnixTime или Date()?

    Даты при парсинге строки из базы в виде ресурса, возвращаются в формате строки "2017-10-13T22:18:20".
    Проверил в консоле обычного браузера преобразуется в дату как надо командной:

    var date = new Date("2017-10-13T22:18:20");
    

    Но тот же самый код отказывается работать в BAS'е:
    alt text
    0_1507926157785_test.xml

    Думаю, как временное решение, можно пока переводить дату в UnixTime через команду "Браузер -> Яваскрипт" там выполняется нормально.

    new Date([[DATE_FROM_BASE]]).getTime()
    

    0_1507981067869_Screenshot_1.png

    Либо отказаться от типа данных в БД "Date" в пользу "Int", но просматривать базу будет неудобно



  • Поправочка браузерный яваскрипт еще и часовой пояс не учитывает, поэтому код должен быть:

    new Date([[DATE_FROM_BASE]]).getTime() + new Date([[DATE_FROM_BASE]]).getTimezoneOffset()*60*1000
    

  • administrators

    @Geograph Исправил, теперь колонка с датой возвращается как целое число.
    Также теперь есть нода и можно использовать moment.js


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.