在操作分钟后,Momentjs返回错误的日期

时间:2016-01-03 09:35:53

标签: javascript php codeigniter date momentjs

在我的php应用程序中,我像这样设置意大利时区:

config.php

上面的字符串位于我的momentjs文件中,该文件是应用程序的核心。无论如何,从后端我使用CodeIgnitervar end_date_temp = Date.parse($('#end-datetime').val()); 框架。当用户从正确输入中选择日期时,设置此结果:

enter image description here

现在我从这个输入中得到这样的值:

var end_date = moment(end_date_temp).add(serviceDuration, 'minutes').format('DD/MM/YYYY HH:mm');
$('#end-datetime').val(end_date);

最初的结果是错误的:

  

Tue Mar 01 2016 11:03:00 GMT + 0100(ora solare Europa occidentale)

其余代码是:

moment.locale('it')

注意:我也尝试设置var end_date_temp = moment($('#end-datetime').val())._i; var end_date = moment(moment(end_date_temp).add(serviceDuration, 'minutes')).format('DD/MM/YYYY HH:mm'); $('#end-datetime').val(end_date); 但是在我的javascript库中出现了相同的结果,我是意大利时区的momentjs。怎么了?

更新代码:

src/
    main/java/
    main/resources/ ---/here I'm keeping my XML configuratoin files.
pom.xml

3 个答案:

答案 0 :(得分:2)

// parse the input string to a moment object, **specifying the input format**
var end_date = moment($('#end-datetime').val(), 'DD/MM/YYYY HH:mm');

// manipulate it as desired
end_date.add(serviceDuration, 'minutes');

// format it to the specified output format, and assign the result back to your field
$('#end-datetime').val(end_date.format('DD/MM/YYYY HH:mm'));

如果您愿意,可以在一行代码中执行此操作。

$('#end-datetime').val(moment($('#end-datetime').val(), 'DD/MM/YYYY HH:mm').add(serviceDuration, 'minutes').format('DD/MM/YYYY HH:mm'));

区域设置对于这段特定代码并不重要,因为您不使用任何特定于语言环境的函数或格式说明符

答案 1 :(得分:0)

momentjs正在使用美国日期格式(MM / DD / YYYY),强制执行格式以获得正确的日期:



var input = '03/01/2016 11:00';
var date = moment(input, 'DD/MM/YYYY HH:mm');

document.write(date);

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.0/moment.min.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

经过多次尝试,我修好了我的时区(意大利语),如下:

from math import radians, cos, sin, asin, sqrt

from scipy.spatial.distance import pdist, squareform
from sklearn.cluster import DBSCAN

import matplotlib.pyplot as plt
import pandas as pd


def haversine(lonlat1, lonlat2):
    """
    Calculate the great circle distance between two points 
    on the earth (specified in decimal degrees)
    """
    # convert decimal degrees to radians 
    lat1, lon1 = lonlat1
    lat2, lon2 = lonlat2
    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])

    # haversine formula 
    dlon = lon2 - lon1 
    dlat = lat2 - lat1 
    a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
    c = 2 * asin(sqrt(a)) 
    r = 6371 # Radius of earth in kilometers. Use 3956 for miles
    return c * r


X = pd.read_csv('dbscan_test.csv')
distance_matrix = squareform(pdist(X, (lambda u,v: haversine(u,v))))

db = DBSCAN(eps=0.2, min_samples=2, metric='precomputed')  # using "precomputed" as recommended by @Anony-Mousse
y_db = db.fit_predict(distance_matrix)

X['cluster'] = y_db

plt.scatter(X['lat'], X['lng'], c=X['cluster'])
plt.show()

我将moment.locale('it'); var end_date_temp = moment($('#end-datetime').val()).format('DD/MM/YYYY HH:mm') var end_date = moment(end_date_temp).add(30, 'minutes'); $('#end-datetime').val(moment(moment(end_date).toDate()).format('DD/MM/YYYY HH:mm')); 声明为.locale,下次我也会在时区中格式化输入文本返回的时间。我用it方法操纵了日期,为此,我创建了另一个momentjs对象的实例。最后,我从输入中传递值,再次以我的时区格式重新格式化日期'因为在操作中我丢失了之前的格式。最终结果是我想要的。无论如何,希望这有帮助,如果有人找到比我更高兴的解决方案,我会很高兴看到。