我正在尝试使用MomentJS Timezone将用户输入的时间从当地时间转换为GMT + 1,但是,之前我从未使用过此库,文档让我感到困惑。
我的表单使用Bootstrap Datepicker和Bootstrap timepicker来创建用于输入事件日期和时间的UI,如下所示:
> (define (fib n)
(define/free (f index n-2 n-1)
(displayln n)
(if (< index 1)
n-1
(f (sub1 index) n-1 (+ n-2 n-1))))
(f n 0 1))
n: identifier used out of context
context...:
matching binding...: in: n
然后我使用此函数来收集发送到PHP文件的日期和时间,如下所示:
<label>Date:</label>
<input type="text" id="dteDay">
<input type="hidden" id="iptDate">
<label>Time (GMT+1 only):</label>
<input id="iptTime" type="text">
<script>
$("#dteDay").datepicker({
format: "dd/mm/yyyy",
todayBtn: "linked",
todayHighlight: true,
startDate: "-2d",
endDate: "+0d",
});
$('#iptTime').timepicker({
minuteStep: 5,
showMeridian: false
});
</script>
我需要做的是将输入的时间更改为GMT + 1(或夏季的GMT + 2),以匹配我们其他系统使用的时间。
我了解MomentJS时区,您可以将日期转换为特定的时区,如下所示:
function CreateReport(){
if( $("#sltMyName").select2("val") == null ){
ShowError("Please Enter Your Name!");
}
else if( $("#sltTheirName").select2("val") == null ){
ShowError("Please Enter Their Name!");
}
else if( $("#dteDay").val() == "" ){
ShowError("Please Enter the Date of Incident!");
}
else if( $("#iptTime").val() == "" ){
ShowError("Please Enter the Time of Incident!");
}
else if( $("#txtStory").val() == "" ){
ShowError("Please Enter the Full Story!");
}
else if( $("#txtEvidence").val() == "" ){
ShowError("Please List your Evidence");
}
else{
if( $("#sltOffence").val() == "Other" && $("#iptOtherOffence").val() == ""){
ShowError("Please Enter Offence");
}
else if( $("#sltOffence").val() == "Other" ){
var Offence = $("#iptOtherOffence").val();
}
else{
var Offence = $("#sltOffence").val();
}
$.post(
'includes/complaint/index.php',
{
Server: $("#sltServerRegion").val(),
MyName: JSON.stringify($("#sltMyName").select2("val")),
TheirName: JSON.stringify($("#sltTheirName").select2("val")),
Date: $("#dteDay").val(),
Time: $("#iptTime").val(),
Offence: Offence,
Story: $("#txtStory").val(),
Evidence: $("#txtEvidence").val(),
RefundAmount: $("#iptRefundAmount").val(),
RefundPreference: $("#sltRefundPreference").val()
},
function(data){
returnValue = JSON.parse(data);
if( returnValue["data"] == 1){
window.location.href = returnValue["url"];
}
else{
ShowError(returnValue["msg"]);
}
}
);
}
}
虽然我不太了解这一点。它将它从什么(即GMT + 1)转换为New_York?
简而言之,如何将用户输入的时间从当地时间转换为GMT + 1(如果可能的话,在夏季GMT + 2),然后将它们分开以传递给AJAX函数?
提前致谢。
答案 0 :(得分:1)
要从本地时间转换为固定的UTC偏移量,您根本不需要时刻时区附加组件。你可以单独使用Moment.js。例如:
var m = moment("2017-01-01 00:00:00"); // input is local time
m.utcOffset('+01:00'); // convert to UTC+1
var s = m.format("YYYY-MM-DD HH:mm:ss"); // output string
但是,由于您要求从本地时间转换为在夏令时间内在UTC + 1和UTC + 2之间切换的时区,因此您必须确实使用时刻时区。但首先,您必须为目的地选择正确的时区 - 并非每个在+1和+2之间切换的时区在同一天或同一时间进行。不要随意挑选一个。可以找到它们的列表here。
一个这样的时区是Europe/Paris
,它使用欧盟的DST规则从UTC + 1(CET)切换到UTC + 2(CEST)
var m = moment("2017-01-01 00:00:00"); // input is local time
m.tz('Europe/Paris'); // convert to UTC+1
var s = m.format("YYYY-MM-DD HH:mm:ss"); // output string
此外,在您的问题中,您询问了该示例的转换内容。根本没有转换 - 它将输入视为America/New_York
时间。由于您希望从当地时间开始,因此不会使用moment.tz(...)
来构建片刻,而是在现有的本地时刻使用.tz(...)
。
还有一件事 - 另一个答案建议更改默认时区。这实际上不会解决你的问题。事实上,它会阻止您实现您所描述的内容 - 因为那时您的所有输入都将被视为该时区内的时间,而不是用户计算机的本地时区。
答案 1 :(得分:0)
它将给定的日期时间2014-06-01 12:00
从世界上的默认时区(GMT)更改为提供的日期时间moment.tz.setDefault("America/New_York");
。
您也可以使用以下方式更改默认值:
{{1}}
这是您可以在时区时区中用作字符串的默认时区列表:
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
您也可以使用moment和utcOffset方法: