Вычислите промежуток в JavaScript

Так что мне удалось решить мою проблему с Py2neo, но не проблему с Neomodel. Если я найду способ заставить Neomodel работать, я опубликую его и либо сделаю ссылку на этот пост, либо оставлю комментарий в этой теме.

Решение Py2neo с py2neo v4.0 и neo4j v3.o

Я пробовал различные комбинации, начиная с neo4j 2.3, вместе с различными версиями py2neo, такими как 3.1.2, а затем сделал то же самое с neo4j v3.0.

Я публикую свой сценарий, который использовал для создания узла и соединения с графом, так как я сходил с ума, пытаясь выяснить, плохо ли я настроил конфигурацию или была ли ошибка в пакете, драйвере и т. Д. [1112 ]

Скрипт Py2neo

from py2neo import Node, Relationship, Graph                                       

graph = Graph('http://localhost:7474/db/data',user='neo4j',pass word='password1234')
tx = graph.begin()                                                                 
a = Node(label='hero',name='Sabri')                                                
tx.create(a)                                                                       
tx.commit()  

Устаревший драйвер py2neo v3.1.2 в тандеме с Neo4j v3.4

Как обсуждалось в этом Отчет о проблеме Github https://github.com/neo4j/neo4j-python-driver/issues/252 пользователь, который сообщил о проблеме, использовал py2neo 3.1.2 вместе с Neo4jv3.4. Подозрение было связано с устаревшим драйвером (v1.1), который поставлялся с py2neo 3.1.2. Новый дистрибутив Neo4j v3.4, похоже, поставляется с новым драйвером 1.6.

Обновление py2neo до v4.0 и использование последней версии сервера Neo4j, т.е. v3.4

При этом я столкнулся с другой ошибкой

File "/Users/sjamal/.conda/envs/py2neo.v4/lib/python3.6/site-packages/py2neo/internal/http.py", line 26, in 
from neo4j.addressing import SocketAddress
ModuleNotFoundError: No module named 'neo4j.addressing'

[1118 В этом потоке stackoverflow обсуждалось ( ModuleNotFoundError: нет модуля с именем 'neo4j.addressing' и ModuleNotFoundError: нет модуля с именем 'neo4j' ), что проблема может заключаться в том, что драйвер драйвера 1.6 может потребоваться вручную установил через пипс, что я и сделал.

pip install neo4j-driver==1.6.2

Теперь я получил новую ошибку, когда TypeError был перехвачен при вызове объекта карты.

File "/Users/sjamal/.conda/envs/py2neo.v4/lib/python3.6/site-packages/py2neo/internal/http.py", line 74, in fix_parameters
raise TypeError("Parameters of type {} are not supported".format(type(value).__name__))

TypeError: параметры карты типов не поддерживаются

Я обнаружил эту проблему с github, опубликованную speters-cmri https://github.com/technige/py2neo/issues/688 [ 117], который содержал следующий коммит github ( https://github.com/technige/py2neo/compare/v4...CMRI-ProCan:v4 ) для решения проблемы путем изменения скрипта json.py в пакете py2neo

я снова запустил свой скрипт, чтобы добавить тестовый узел, и он запустился без проблем.

Если вы слишком ленивы или просто слишком расстроены, чтобы пройти длинное объяснение, вот краткое изложение

1. Make sure neo4j v3.0+ is installed. I suggest you look into docker to install neo4j using a docker image

2. pip install py2neo==v4.0
3. pip install neo4j-driver==1.6.2

4. Modify json.py file as described here https://github.com/technige/py2neo/compare/v4...CMRI-ProCan:v4

5. Run py2neo script outlined above

14
задан Jason Bunting 26 September 2008 в 18:38
поделиться

5 ответов

Как только Ваши форматы даты текстового поля известны заранее, можно использовать функции Даты Matt Kruse в JavaScript, чтобы преобразовать два в метку времени, вычесть и затем записать в получающееся текстовое поле.

Одинаково Вход Даты JQuery код для stringToDate мог быть адаптирован к Вашим целям - ниже взятий строка в формате "YYYY-MM-DD" и преобразовывает его в объект даты. Метка времени (getTime()) из этих объектов могла использоваться для Ваших вычислений.

stringToDate: function(string) {
    var matches;
    if (matches = string.match(/^(\d{4,4})-(\d{2,2})-(\d{2,2})$/)) {
       return new Date(matches[1], matches[2] - 1, matches[3]);
    } else {
       return null;
    };
}
5
ответ дан 1 December 2019 в 13:34
поделиться

Я взял то, что @PConroy сделал и добавил к нему путем выполнения вычислений для Вас. Я также добавил regex, чтобы удостовериться, что время является частью строки для создания объекта даты.

<html>
    <head>
        <script type="text/javascript">
            function stringToDate(string) {
                var matches;
                if (matches = string.match(/^(\d{4,4})-(\d{2,2})-(\d{2,2}) (\d{2,2}):(\d{2,2}):(\d{2,2})$/)) {
                   return new Date(matches[1], matches[2] - 1, matches[3], matches[4], matches[5], matches[6]);
                } else {
                   return null;
                };
            }

            //Convert duration from milliseconds to 0000:00:00.00 format
            function MillisecondsToDuration(n) {
                var hms = "";
                var dtm = new Date();
                dtm.setTime(n);
                var h = "000" + Math.floor(n / 3600000);
                var m = "0" + dtm.getMinutes();
                var s = "0" + dtm.getSeconds();
                var cs = "0" + Math.round(dtm.getMilliseconds() / 10);
                hms = h.substr(h.length-4) + ":" + m.substr(m.length-2) + ":";
                hms += s.substr(s.length-2) + "." + cs.substr(cs.length-2);
                return hms;
            }

            var beginDate = stringToDate('2008-09-19 07:14:00');
            var endDate = stringToDate('2008-09-19 17:35:00');

            var n = endDate.getTime() - beginDate.getTime();

            alert(MillisecondsToDuration(n));
        </script>
    </head>
    <body>
    </body>
</html>

Это довольно грубо, так как я кодировал его довольно быстро, но это работает. Я проверил его. Окно предупреждений отобразит 0010:21:00.00 (HHHH:MM:SS.SS). В основном все, что необходимо сделать, получают значения от текстовых полей.

4
ответ дан 1 December 2019 в 13:34
поделиться

Ответы, прежде всего, предполагают манипуляции со строками. Вот решение, которое работает с чистыми объектами даты:

var start = new Date().getTime();
window.setTimeout(function(){
  var diff = new Date(new Date().getTime() - start);
  // this will log 0 hours, 0 minutes, 1 second
  console.log(diff.getHours(), diff.getMinutes(),diff.getSeconds());
},1000);
2
ответ дан 1 December 2019 в 13:34
поделиться
function stringToDate(string) {
        var matches;
    if (matches = string.match(/^(\d{4,4})-(\d{2,2})-(\d{2,2}) (\d{2,2}):(\d{2,2}):(\d{2,2})$/)) {
       return new Date(matches[1], matches[2] - 1, matches[3], matches[4], matches[5], matches[6]);
    } else {
       return null;
    };
}

    function getTimeSpan(ticks) {
        var d = new Date(ticks);
        return {
            hour: d.getUTCHours(), 
            minute: d.getMinutes(), 
            second: d.getSeconds()
        }
    }

    var beginDate = stringToDate('2008-09-19 07:14:00');
    var endDate = stringToDate('2008-09-19 17:35:00');

    var sp = getTimeSpan(endDate - beginDate);
    alert("timeuse:" + sp.hour + " hour " + sp.minute + " minute " + sp.second + " second ");

вы можете использовать getUTCHours () вместо Math.floor (n / 3600000);

6
ответ дан 1 December 2019 в 13:34
поделиться

Используйте Math.floor (n / 3600000) вместо getUTCHours (), иначе вы потеряете количество часов, превышающее 24.

Например, если у вас 126980000 миллисекунд, это должно преобразоваться в 0035: 16: 20.00

Если вы используете getUTCHours (), вы получите неверную строку 0011: 16: 20.00

Вместо этого используйте это (модификации обозначены KK-MOD):

function MillisecondsToDuration (n) {
var hms = "";
var dtm = new Date ();
dtm.setTime (n);
var d = Math.floor (n / 3600000/24); // KK-MOD
var h = "0" + (Math.floor (n / 3600000) - (d * 24)); // KK-MOD
var m = "0" + dtm.getMinutes ();
var s = "0" + dtm.getSeconds ();
var cs = "0" + Math.round (dtm.getMilliseconds () / 10);
hms = (d> 0? d + "T": "") + h.substr (h.length - 2) + ":" + m.substr (m.substr (m.length - 2) + ":"; // KK-MOD
hms + = s.substr (s.length - 2) + "." + cs.substr (cs.length - 2);
вернуть hms; }

Итак, 192680000 отображается как 1T11: 16: 20.00, что составляет 1 день 11 часов 16 минут 20 секунд

0
ответ дан 1 December 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: